📜  Solidity-枚举(1)

📅  最后修改于: 2023-12-03 15:05:14.612000             🧑  作者: Mango

Solidity-枚举

Solidity是以太坊智能合约编程语言,支持枚举类型。枚举类型允许您定义一组具有离散值的常量。

定义枚举

要定义枚举,您需要使用 enum 关键字并在其中列出常量。在下面的示例中,我们定义了一个名为 Direction 的枚举,它只包含四个常量:NORTHSOUTHEASTWEST

enum Direction {
    NORTH,
    SOUTH,
    EAST,
    WEST
}
使用枚举

在声明枚举后,我们可以声明这个类型的变量,例如:

Direction public direction = Direction.NORTH;

还可以在构造函数中初始化枚举类型变量:

constructor() public {
    direction = Direction.SOUTH;
}
访问枚举值

要访问枚举类型的特定值,我们只需将其名称用作变量即可。例如:

require(direction == Direction.NORTH, "Invalid direction");
枚举类型的索引

在枚举类型中,每个常量都有一个数字索引,从 0 开始递增。您可以使用 uint8 类型来引用枚举类型的索引。例如:

enum Direction {
    NORTH, // 0
    SOUTH, // 1
    EAST,  // 2
    WEST   // 3
}

uint8 public directionIndex = uint8(Direction.WEST);
枚举类型的限制

枚举类型在 Solidity 中有一些限制。以下是其中一些限制:

  • 枚举类型不能继承。
  • 枚举类型不能定义为结构体的成员。
  • 使用枚举类型的 storage 变量会导致合约的大小变大。因此,您应该避免在合约中过多地使用枚举类型。
示例代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract EnumExample {
    enum Direction {
        NORTH,
        SOUTH,
        EAST,
        WEST
    }

    Direction public direction = Direction.NORTH;

    constructor() {
        direction = Direction.SOUTH;
    }

    function setDirection(Direction _dir) public {
        direction = _dir;
    }

    function getDirection() public view returns (Direction) {
        return direction;
    }

    function getDirectionIndex() public view returns (uint8) {
        return uint8(direction);
    }
}