当前位置: 首页 > news >正文

solidity基础 -- 枚举

        在智能合约开发领域,Solidity语言因其简洁高效而被广泛使用。其中,枚举(enum)作为一种特殊的数据类型,为合约的状态管理提供了极大的便利。本文将通过一个具体的Solidity合约示例,深入探讨枚举的定义、使用以及相关操作,帮助开发者更好地理解和运用这一强大的工具。

        枚举本质上是一种用户自定义的数据类型,它允许开发者定义一组具名的常量值 。这些常量值在代码中代表着特定的意义,且取值范围是固定且明确的。 

        本资料为自己查找与整理,如有不足请多指教 ~ 感谢包容

一、枚举的定义与基本概念

        枚举是一种用户自定义的数据类型,它允许我们定义一组有限的常量值。在Solidity中,枚举通过关键字enum来定义。以下是一个简单的枚举定义示例:

enum Status {None, //默认 Pending, //处理中Shipped, //装载中Completed, //已装载Rejected,  // 已拒绝Canceled //已取消
}

        在这个示例中,我们定义了一个名为Status的枚举类型,它包含了6个成员,分别是NonePendingShippedCompletedRejectedCanceled。每个成员代表一种特定的状态,它们在枚举内部是按顺序编号的,从0开始。例如,None的值为0,Pending的值为1,依此类推。这种编号方式使得枚举在底层存储时更加高效,同时也方便了状态的比较和转换。

二、枚举在合约中的应用

1. 定义合约状态

枚举类型非常适合用来定义合约的状态。在我们的示例合约Enum中,使用Status枚举来表示订单的状态:

Status public status;

这里定义了一个名为status的公共变量,其类型为Status枚举。通过这种方式,我们可以清晰地表示订单当前所处的状态,如Pending表示订单正在处理中,Shipped表示订单已装载等。使用枚举来定义状态的好处是,它限制了状态的取值范围,避免了使用整数或其他类型时可能出现的非法状态值,从而提高了合约的健壮性和可维护性。

2. 结构体中的枚举使用

枚举不仅可以单独作为变量使用,还可以嵌入到结构体中,以构建更复杂的数据模型。在示例合约中,定义了一个名为Order的结构体:

struct Order {address buyer;Status status;
}

        这个结构体包含了两个字段:buyer表示订单的购买者地址,status表示订单的状态,其类型为Status枚举。通过将枚举嵌入到结构体中,我们可以将订单的购买者信息和状态信息有机地结合起来,方便对订单进行管理和操作。例如,我们可以创建一个订单数组来存储多个订单信息:

Order[] public orders;

三、枚举的操作与函数

1. 获取枚举值

在合约中,我们可以通过定义函数来获取枚举变量的值。在示例合约中,定义了一个名为get的函数:

function get() view external returns (Status) {return status;
}

        这个函数是一个只读函数(view),它返回合约中status变量的当前值。通过调用这个函数,外部合约或用户可以查询订单的当前状态。这种只读操作不会改变合约的状态,因此不会消耗太多的Gas费用。

2. 设置枚举值

        除了获取枚举值,我们还可以通过函数来设置枚举变量的值。在示例合约中,定义了一个名为set的函数:

function set(Status _status) external {status = _status;
}

        这个函数接受一个Status枚举类型的参数_status,并将合约中的status变量设置为该值。通过这种方式,我们可以根据业务逻辑的需要,动态地改变订单的状态。例如,当订单处理完成后,可以调用set(Status.Completed)来将订单状态设置为已完成。

3. 修改枚举值

        在某些情况下,我们可能需要根据特定的条件或事件来修改枚举变量的值。在示例合约中,定义了一个名为ship的函数:

function ship() external {status = Status.Shipped;
}

        这个函数将合约中的status变量设置为Status.Shipped,表示订单已装载。这种修改操作通常与合约的业务流程紧密相关,例如在物流环节中,当货物被装载到运输工具上时,就可以调用这个函数来更新订单状态。

4. 重置枚举值

        有时候,我们可能需要将枚举变量重置为默认值。在Solidity中,可以使用delete关键字来实现这一点。在示例合约中,定义了一个名为reset的函数:

function reset() external {delete status;
}

这个函数通过delete关键字将status变量重置为枚举的默认值,即Status.None。这种重置操作在某些特定的业务场景中非常有用,例如当订单被取消或出现异常情况时,可以将订单状态重置为初始状态,以便重新处理或进行其他操作。

四、枚举的优势与最佳实践

1. 代码可读性与可维护性

        使用枚举类型可以使合约代码更加清晰、易于理解和维护。与使用整数或其他类型来表示状态相比,枚举提供了一种更具描述性的表示方式。例如,Status.Pending比简单的数字1更能直观地表达订单正在处理中的状态。这种可读性不仅有助于开发者更好地理解合约逻辑,还方便了代码的审查和维护工作。

2. 类型安全与错误预防

        枚举的另一个重要优势是类型安全。由于枚举限制了变量的取值范围,它可以在编译时检查状态值的合法性,从而避免了非法状态值的出现。例如,如果我们尝试将一个非法的状态值赋给status变量,编译器将会报错,提示我们状态值无效。这种类型检查机制大大降低了合约出现错误的可能性,提高了合约的可靠性和安全性。

3. 节省内存与Gas优化

        在底层实现上,枚举类型通常会根据成员的数量进行优化存储。Solidity编译器会根据枚举成员的数量选择合适的数据类型来存储枚举值,从而节省内存空间。此外,由于枚举操作相对简单,它们在执行时通常会消耗较少的Gas费用。在区块链环境中,Gas费用是一个重要的考虑因素,因此使用枚举可以在一定程度上优化合约的性能和成本。

4. 最佳实践建议

  • 合理定义枚举成员:在定义枚举时,应确保成员的名称具有明确的语义,能够准确地表达其所代表的状态或概念。同时,枚举成员的数量应适中,过多的成员可能会使枚举变得复杂难懂,而过少的成员则可能无法满足业务需求。

  • 使用公共接口暴露枚举:如果需要在合约外部访问枚举类型,建议定义一个公共接口来暴露枚举。这样可以方便外部合约或用户了解枚举的定义和成员,同时也有助于合约的解耦和复用。

  • 结合事件使用枚举:在合约中,可以结合事件(event)来记录枚举值的变化。当枚举变量的值发生变化时,触发一个事件并传递新的枚举值。这样可以在区块链上留下状态变更的记录,方便后续的审计和跟踪.

 五、其他例子

        例如,在日常生活中,一周有七天,我们可以将这七天定义为一个枚举类型。在 Solidity 中,可能会这样写:

例如,在日常生活中,一周有七天,我们可以将这七天定义为一个枚举类型。在 Solidity 中,可能会这样写:
enum Weekdays {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

        如此一来,我们就创建了一个名为Weekdays的枚举类型,它包含了一周中每一天的常量表示。这使得在代码中处理与一周日期相关的逻辑时,能够使用这些直观的名称,而非晦涩难懂的数字或其他形式。

 

六、总结

        枚举是Solidity语言中一个强大而实用的数据类型,它为智能合约的状态管理提供了清晰、高效和类型安全的解决方案。通过合理地定义和使用枚举,开发者可以提高合约的可读性、可维护性和可靠性,同时还能优化合约的性能和成本。

        在实际的智能合约开发中,枚举类型应该成为每个开发者工具箱中的重要组成部分,帮助我们构建更加健壮和高效的区块链应用。

        本资料为自己查找与整理,如有不足请多指教 ~ 感谢包容

相关文章:

solidity基础 -- 枚举

在智能合约开发领域,Solidity语言因其简洁高效而被广泛使用。其中,枚举(enum)作为一种特殊的数据类型,为合约的状态管理提供了极大的便利。本文将通过一个具体的Solidity合约示例,深入探讨枚举的定义、使用…...

重回C语言之老兵重装上阵(六)枚举

1. 什么是枚举 (enum)? 枚举(enum)是 C 语言中的一种数据类型,用于定义一组具名的整数常量。它可以使代码更加可读,帮助程序员更容易理解程序中的常量值。通过枚举,程序员可以使用有意义的名称来代替数字&…...

python+playwright自动化测试(一):安装及简单使用,截图录屏

目录 基本使用 浏览器调用 启用浏览器 创建窗口对象 访问URL 页面的刷新、返回、前进 关闭 截图、录屏、保存pdf 截图 录屏 保存为pdf 设置窗口大小 调试模式 手机模式及new_context的更多参数 手机模式 new_context的其他参数 设置语言和时区 设置和修改位置…...

Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)

MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),其体系结构设计旨在提供高效的数据存储、查询处理和事务管理。MySQL的体系结构可以分为多个层次,每个层次负责不同的功能模块。 MySQL的体系结构主要由以下几个部分组成&#…...

git merge 压缩提交

在 Git 中,执行 git merge 时可以通过一些操作来“压缩”提交,通常是指将合并过程中的多个提交压缩成一个单一的提交。这可以通过使用 --squash 选项来完成,或者在合并后进行交互式 rebase。以下是两种常见的方法: 方法 1&#x…...

Python脚本自动发送电子邮件

要编写一个Python脚本来自动发送电子邮件,你可以使用smtplib库来处理SMTP协议,以及email库来构建邮件内容。 安装必要的库 通常情况下,smtplib和email库是Python标准库的一部分,因此不需要额外安装。如果你使用的是较旧的Python版…...

uniapp中rpx和upx的区别

在 UniApp 中,rpx 和 upx 是两种不同的单位,它们的主要区别在于适用的场景和计算方式。 ### rpx(Responsive Pixel) - **适用场景**:rpx 是一种响应式单位,主要用于小程序和移动端的布局。 - **计算方式**…...

CentOS 9 Stream 中查看 Python 版本并升级 Python

CentOS 9 Stream 中查看 Python 版本并升级 Python 1. 查看当前 Python 版本2. 升级 Python 版本(1)安装开发工具(2)安装必要的依赖包(3)下载和安装新版本的 Python(4)验证安装 3. …...

可以用于分割字符串的方法(python)

一、str.split(sep,maxsplit)函数(返回列表) sep:分隔符 maxsplit:分割次数 a"Hello world" list1a.split(" ",1) print(list1) 结果: [Hello, world] 二、str.rsplit(sep,maxsplit)函数&…...

【Vue】全局/局部组件使用流程(Vue2为例)

全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…...

virtual box虚拟机误删Python3.6后导致UBUNTU18.04开机无UI界面(进不了desktop)的解决方法

最近在解决一个python引起的问题的时候,作者心一狠,删了系统自带的python3.6, 顺便还删了python3。导致重启后ubuntu的virtual box虚拟机无法看到UI登录界面,只给我了孤零零的命令行。装了很多东西不可能重装,无奈只能…...

虚拟线程JDK与Spring Core Reactor

两种虚拟线程对比:JDK vs. Spring Core Reactor性能对比 1、基于 JDK 的虚拟线程实现: 摘自实际代码: public static void withFlatMapUsingJDK() { ... var virtualThreadExecutor Executors.newThreadPerTaskExecutor( Thread .ofVirtual…...

纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析

一、纯 Python 1.1 基础概念 Python 是一种高级、通用、解释型的编程语言,以其简洁易读的语法和丰富的标准库而闻名。“纯 Python” 在这里指的是不依赖特定的 Web 框架或数据分析工具,仅使用 Python 原生的功能和标准库来开发应用程序或执行任务。 1.…...

C++ NULL和nullptr

NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码: #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif 如上是条件编译的宏定义 确保在不同编程环境下正确处理NULL的定义 C中NULL可能被定义…...

算法日记1:洛谷p2678跳石头(二分答案)

1、题目 二、题解: 2.1解题思路: 1.题目要求求出最小值最大,明显的二分答案题目,所以我们可以二分可以跳跃距离int l-1,rL1; 2.此时我们思考lmid和rmid的处理,当我们的check(mid)为true时候 表明我们此时的mid是符合要求的, 那么…...

PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析

PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析 目录 PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析1. 引言2. PID控制器的基本概念2.1 PID控制器的定义2.2 PID控制器的核心思想2.3 PID控制器的应用领域 3. PID控…...

Vue中nextTick实现原理

源码实现思路(面试高分回答) 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前: 存在一个 callbacks 数组,用于存放所有的 cb 回调函数。存在一个 flushCallbac…...

【MATLAB】subplot如何增加title

在 Matlab 中,使用 subplot 函数将图形窗口划分为多个子图,并使用 title 函数为每个子图添加标题。以下是一个示例: matlab % 生成示例数据 x 0:0.1:10; y1 sin(x); y2 cos(x); % 创建一个 2 行 1 列的子图布局,并选…...

vue3+ts的<img :src=““ >写法

vue3ts的<img :src"" >写法<img :src"datasetImage" alt"数据分布示意图" /><script setup lang"ts">const datasetImage ref();datasetImage.value new URL(../../../assets/images/login-background.jpg, impo…...

Vue+Echarts+百度地图 实现 路径规划

实现功能: 通过选择 相关调拨&#xff0c;系统自动规划 路径&#xff0c;并且以地图的形式呈现最佳路径 技术难点: 1. vue 结合使用 echarts 2.echarts 在 vue嵌入百度地图&#xff0c;并且做出路径 曲线 最终结果:...

uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?

前言 在开发微信小程序时&#xff0c;使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时&#xff0c;就遇到了两个非常令人头疼的问题&#xff1a; 层级穿透&#xff1a;由于 textarea 是原生组件&#xff0c;任何元素都无法遮盖住它。当其…...

IGP协议的双点双向注入(路由引入)

一、拓扑环境 二、单向注入 以上拓扑为例&#xff0c;单点注入存在路由回包问题 在AR5上注入直连路由 55.5.5.5 需求&#xff1a;AR1上的10.1.1.1 需访问AR5上的55.5.5.5 1、在AR2和AR3上查看注入的55.5.5.5的路由信息 2、现在边界设备以学习到目的网段的路由信息&#xff0…...

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想&#xff1a;数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架&#xff1a; create-react-app &#xff0c;目前使用它安装默认是19版本&#xff0c;我们这里降为18…...

“AI 自动化效能评估系统:开启企业高效发展新征程

在当今数字化飞速发展的时代&#xff0c;企业面临着日益激烈的市场竞争&#xff0c;如何提升效率、降低成本成为了企业生存与发展的关键。AI 自动化效能评估系统应运而生&#xff0c;它如同一把智能钥匙&#xff0c;为企业开启了高效发展的新征程。 AI 自动化效能评估系统&…...

免 root 开启 Pixel 手机 VoLTE 功能

部分运营商需要开启 VoLTE 功能才可以正常通话和接收短信&#xff0c;但是默认情况下&#xff0c;Pixel 是无法开启的&#xff0c;需要我们手动开启一下。经过网友的确认&#xff0c;这种方法还适用于荣耀 MAGIC 等其他品牌的手机。 具体流程如下&#xff1a; 1.打开开发者选…...

华为2024嵌入式研发面试题

01 你认为最好的排序算法是什么&#xff1f; 在实际的编程中&#xff0c;最好的排序算法要根据实际需求和数据规模来选择&#xff0c;因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点&#xff1a; 冒泡排序 冒泡排序是一种简单直观的排序算法&#xff0…...

Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法

报错信息&#xff1a; android.database.sqlite.SQLiteException: too many SQL variables (code 1 SQLITE_ERROR): while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句…...

PHP 字符串

PHP 字符串 引言 在 PHP 中&#xff0c;字符串是一种非常基础且重要的数据类型。字符串可以包含字母、数字、标点符号以及特殊字符。PHP 提供了丰富的字符串函数&#xff0c;使得字符串操作变得简单而高效。本文将详细介绍 PHP 中字符串的常用操作&#xff0c;包括字符串的创…...

Android15源码编译问题处理

最近想在Raspberry Pi5上面运行自己编译的Android15镜像,参考如下链接来处理: GitHub - raspberry-vanilla/android_local_manifest GitHub - raspberry-vanilla/android_kernel_manifest 代码同步完后,编译就出问题了,总是提示: FAILED: analyzing Android.bp files and…...

Transformer架构和Transformers 库和Hugging Face

Transformer架构 和 Hugging Face 之间的关系非常紧密&#xff0c;Hugging Face 是推动 Transformer 架构普及和应用的重要力量。以下是两者的关系及其具体联系&#xff1a; 1. Transformer 架构 背景: Transformer 是由 Google 在 2017 年提出的革命性架构&#xff0c;基于自…...

【机器学习 | 数据挖掘】离群点检测

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…...

【极速版 -- 大模型入门到进阶】除了 Prompting, 大模型还能如何被应用?

文章目录 大模型应用 -- Generative AI Projects&#x1f30a; 大模型应用的时效优势&#x1f30a; 大模型应用的方式 - Technology Options应用方式一 &#x1f41f; Prompting&#xff1a;最简单快速应用方式二&#x1f41f; Retrieval augmented generation (RAG)&#xff1…...

[Unity]发包前遇到的坑之GridLayoutGroup

发包前禁用了UI上面一个调试页面A后&#xff0c;发现无法正确获取某一个用了GridLayoutGroup组件的所有子物体的世界坐标。 一顿研究之后发现&#xff0c;在Start的时候想要正确获取其坐标&#xff0c;需要强制刷新一次布局&#xff0c;方法如下&#xff1a; UnityEngine.U…...

【C++】IO 流

文章目录 &#x1f449;C 语言的输入与输出&#x1f448;&#x1f449;流是什么&#x1f448;&#x1f449;C IO 流&#x1f448;C 标准 IO 流C 和 C 语言的输入格式问题C 的多次输入内置类型和自定义类型的转换日期的多次输入C 文件 IO 流文本文件和二进制文件的读写 &#x1…...

Public Key Retrieval is not allowed 解决方法

如图&#xff1a;我的报错是Public Key Retrieval is not allowed&#xff0c;我的前后端都能正常加载&#xff0c;但是在请求数据库时就会报错如下&#xff1a; 解决办法&#xff1a; 在 application.yaml 中的数据库设置地方加上allowPublicKeyRetrievaltrue&#xff0c;然后…...

大数据原生集群 (Hadoop3.X为核心) 本地测试环境搭建二

本篇安装软件版本 mysql5.6 spark3.2.1-hadoop3.2 presto0.272 zeppelin0.11.2 kafka_2.13_3.7.2 mysql 安装步骤见-》 https://blog.csdn.net/dudadudadd/article/details/110874570 spark 安装步骤见-》https://blog.csdn.net/dudadudadd/article/details/109719624 安装…...

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…...

RabbitMQ-消息入队

1 分布式异步的问题 对于一个业务线的处理&#xff0c;如果是一个完整的处理&#xff0c;应该是消息正 常进入队列&#xff0c;同时消息正常被消费掉。 问题来了&#xff1a; 生产者发送消息&#xff0c;在传输过程中&#xff0c;消息丢失了&#xff0c;咋办&#xff1f; 消息发…...

Angular-生命周期及钩子函数

什么是生命周期 Angular 创建和渲染组件及其子组件&#xff0c;当它们绑定的属性发生变化时检查它们&#xff0c;并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…...

算法-高精度问题(带图详细解读~)

今天来分享四道大数运算的模板题. 目录 1. 大数相加2. 大数相减3. 大数相乘4. 大数相除 1. 大数相加 题目链接: LINK 基本思路: 存入数组, 模拟运算. 逆序字符串补零操作依次取数据, 依次相加 3-1 加: (t-ret s1[i] s2[i] carry) % 10; 3-2 进: (t-ret s1[i] s2[i] car…...

MC1.12.2 macOS高清修复OptiFine运行崩溃

最近在玩RLCraft&#xff0c;在windows中运行正常的&#xff0c;移植到macOS中发现如果加载OptiFine模组就会崩溃 报错日志 报错日志如下&#xff0c;其中已经包含了各种版本信息&#xff0c;我就不单独说明了。这里说一下&#xff0c;报错的时候用的是oracle jdk x64的&…...

Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息

Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统&#xff0c;可让您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...

远程和本地文件的互相同步

文章目录 1、rsync实现类似git push pull功能1. 基础概念2. 示例操作3. 定制化和进阶用法4. 定时同步&#xff08;类似自动化&#xff09; 2 命令简化1. 动态传参的脚本2. Shell 函数支持动态路径3. 结合环境变量和参数&#xff08;更简洁&#xff09;4. Makefile 支持动态路径…...

在ES6模块中导入和导出

在ES6模块中导入和导出 以最简单的例子举例 //shoppingCart.js //导出模块 console.log(导出模块);//script.js //导出模块 import ./shoppingCart.js; console.log(导入模块);所以要导入其他模块必须指定类型 <script type"Modules" defer src"script.js&…...

centos使用dpdk库

yum -y install dpdk dpdk-devel 在 C 中使用 DPDK&#xff08;Data Plane Development Kit&#xff09;库通常涉及到以下几个步骤&#xff1a;安装 DPDK、配置编译环境、编写 C 代码并链接 DPDK 库。以下是如何在 C 中引用和使用 DPDK 的详细步骤。 1. 安装 DPDK 首先&#…...

ChatGLM:从GLM-130B到GLM-4全系列大语言模型

摘要 我们介绍了ChatGLM&#xff0c;这是一个不断进化的大语言模型系列&#xff0c;我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列&#xff0c;包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为…...

EF Core分页

Skip(3).Take(8) 最好显式指定排序规则需要知道满足条件的数据的总条数&#xff1a; 用IQueryable的复用 LongCount和Count页数&#xff1a;long pageCount (long)Math.Ceiling(count * 1.0 / pageSize); class Program {static async Task Main(string[] args){using (MyDbC…...

一种ESP8266+OLED时间天气显示

在当今这个信息爆炸的时代&#xff0c;人们对于获取实时信息的需求日益增长&#xff0c;尤其是在时间与天气这两个与日常生活息息相关的方面。而将 ESP8266 与 OLED 显示屏相结合制作的时钟兼天气显示设备&#xff0c;凭借其便携性、实时性以及低成本等优势&#xff0c;成为了众…...

LabVIEW光流跟踪算法

1. 光流跟踪算法的概述 光流&#xff08;Optical Flow&#xff09;是一种图像处理技术&#xff0c;用于估算图像中像素点的运动。通过比较连续帧图像&#xff0c;光流算法可以分析图像中的运动信息&#xff0c;广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…...

Nacos 配置与服务注册问题排查指南

Nacos 配置与服务注册问题排查指南 1. Nacos 配置文件优先级 在 Spring Boot 应用中&#xff0c;配置文件的优先级从高到低依次为&#xff1a; bootstrap.propertiesbootstrap.ymlapplication.propertiesapplication.yml 2. Nacos 配置中心配置示例 以下是一个典型的 Naco…...