常量的可以消耗更低的 gas
。
constant
(常量)和 immutable
(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值;并且还可以节省 gas
。
另外,只有数值变量可以声明 constant
和 immutable
;string
和bytes
可以声明为constant
,但不能为immutable
。
constant和immutable
constant
constant
变量必须在声明的时候初始化,之后再也不能改变。尝试改变的话,编译不通过。
1 | // constant变量必须在声明的时候初始化,之后不能改变 |
immutable
immutable
变量可以在声明时或构造函数中初始化,因此更加灵活。
1 | // immutable变量可以在constructor里初始化,之后不能改变 |
你可以使用全局变量例如 address(this)
,block.number
,或者自定义的函数给 immutable
变量初始化。在下面这个例子,我们利用了 test()
函数给 IMMUTABLE_TEST
初始化为 9
:
1 | // 利用constructor初始化immutable变量,因此可以利用 |