Note
constant 和 immutable
狀態變量聲明 constant
和 immutable
這兩個關鍵字之後,不能在初始化後更改數值。
Tip
只有數值變量可以聲明 constant
和 immutable
; String 和 bytes 可以聲明為 constant
,但不能為 immutable
constant
變量必須在聲明的時候初始化,之後再也不能改變。
嘗試改變的話,會導致編譯不通過
immutable
變量可以在聲明時或者構造函數中初始化。在
Solidity v8.0.21 以後,immutable 變量不需要顯示初始化,反之則需要顯示初始化。
若 immutable 變量既在聲明時初始化,又在 constructor 中初始化,則會使用 constructor 中初始化的值。
-
Q: 下面定義變量的語句中,會報錯的一項是?
A: uint256 public constant x1; -
Q: 下面定義變量的語句中,會報錯的一項是?
A: string immutable x7 = "hello world"; -
Q: 下面哪一項不符合對 constant 和 immutable 的描述?
A: constant 和 immutable 的使用並不會節省 gas -
Q: 在如下的合約中,我們定義了四個 immutable 的變量 y1, y2, y3, y4。其中確實必要在構造函數 constructor 中才賦值的一項是?
uint256 immutable y1; address immutable y2; address immutable y3; uint256 immutable y4; constructor (uint256 _y4){ y1 = block.number; y2 = address(this); y3 = msg.sender; y4 = _y4; }
A: y4
-
Q: 下列哪一个变量不适合用 constant 或 immutable 来修?
A: 合約中的 ETH 數量