Solidity中的枚举类型用于将常见的常量值分组。在本例中,我们将解释如何声明枚举类型,并讨论使用枚举类型的优点。
pragma solidity ^0.8.4;
contract Enum {
enum State { Created, Locked, Inactive }
State public state;
constructor() {
state = State.Created;
}
function lock() public {
state = State.Locked;
}
function unlock() public {
state = State.Inactive;
}
function isActive() public view returns (bool) {
return state == State.Created;
}
}
上面的示例声明了一个枚举类型State
,其中包含三个值:Created
,Locked
和Inactive
。通过在合同中声明一个状态变量state
并将其初始化为Created
,我们可以在合同的不同方法中改变它。
我们也可以在isActive
函数中使用枚举类型的优势之一:对于枚举类型,可以执行严格的比较,并根据需要返回布尔值。
// 状态开始时为Created
assert(Enum.State.Created == state);
// 锁定状态
e.lock();
assert(Enum.State.Locked == state);
// 解锁状态
e.unlock();
assert(Enum.State.Inactive == state);
// 确认其活跃性
assert(false == e.isActive());
在上面的输出中,我们可以看到枚举类型有效地分组了状态,并让我们以一种更直观和可读的方式向其他开发人员展示代码。
枚举类型在Solidity中非常有用,因为它们可以将常量值分组,并提供严格的比较和类型安全的列挺。它们可以用于构建各种分布式应用程序。