Skip to main content

Solidity immutable

Solidity 中的 immutableconstant 类似,都是用来定义不能二度改变的变量。不过 immutable 的限制比 constant 稍微宽松一点。我们在 「constant」 一节提到: constant 变量必须在定义的时候就初始化,其他任何地方都不能再赋值。而 immutable 的限制是:只允许初始化(赋值)一次,并允许在构建函数中再做初始化。

也就是说, immutable 变量允许:

  1. 在声明的时候初始化
  2. 或者在构建函数初始化

所以 immutableconstant 的最大区别就是,它允许在构建函数中才做初始化。

immutable 变量声明

正如上面所述,我们可以在声明的时候对 immutable 变量初始化,或者在构建函数初始化。

声明时初始化
uint immutable n = 5;
试一试 »
在构建函数初始化
uint immutable n;

constructor () {
n = 5;
}
试一试 »

注意不能初始化两次

不能初始化两次
uint immutable n = 0;

constructor () {
n = 5; // 不合法,已经在声明时初始化过了
}
试一试 »

注意不能在函数中初始化

不能在函数初始化 immutable 变量
uint immutable n;

function f() public {
n = 5; // 不合法, 不能在函数初始化 immutable 变量
}
试一试 »

immutable 变量不能更改

immutable 变量不能更改
uint immutable n = 0; // 初始化为0

function f() public {
n = 5; // 不合法,immutable 变量不能更改
}
试一试 »