在 Solidity 中,常量(constant)和不变量(immutable)是两个关键字,用于声明状态变量。声明为常量或不变量的变量在合约创建后不能再被更改,同时可以节省 gas 费用。本文将介绍 constant 和 immutable 关键字的用法以及它们的区别。
1. constant 关键字
constant 变量必须在声明时初始化,并且在之后不能更改。尝试更改 constant 变量的值将导致编译错误。
示例:
uint256 constant CONSTANT_NUM = 10;
string constant CONSTANT_STRING = "0xAA";
bytes constant CONSTANT_BYTES = "WTF";
address constant CONSTANT_ADDRESS = address(0);
2. immutable 关键字
immutable 变量可以在声明时或构造函数中初始化,并且之后不能更改,因此更加灵活。
示例:
uint256 public immutable IMMUTABLE_NUM = 9999999999;
address public immutable IMMUTABLE_ADDRESS;
uint256 public immutable IMMUTABLE_BLOCK;
uint256 public immutable IMMUTABLE_TEST;
constructor() {
IMMUTABLE_ADDRESS = address(this);
IMMUTABLE_BLOCK = block.number;
IMMUTABLE_TEST = test();
}
function test() public pure returns(uint256) {
uint256 what = 9;
return what;
}
常量和不变量的使用可以提高合约的安全性和可读性,并且节省 gas 费用。