Skip to content

Latest commit

 

History

History
55 lines (38 loc) · 1.77 KB

File metadata and controls

55 lines (38 loc) · 1.77 KB

WTF Solidity 極簡入門:常數

重點內容

Note

constant 和 immutable

隨筆

狀態變量聲明 constantimmutable 這兩個關鍵字之後,不能在初始化後更改數值。

Tip

只有數值變量可以聲明 constantimmutable; Stringbytes 可以聲明為 constant,但不能為 immutable

constant

constant 變量必須在聲明的時候初始化,之後再也不能改變。
嘗試改變的話,會導致編譯不通過

immutable

immutable 變量可以在聲明時或者構造函數中初始化。在 Solidity v8.0.21 以後,immutable 變量不需要顯示初始化,反之則需要顯示初始化。
若 immutable 變量既在聲明時初始化,又在 constructor 中初始化,則會使用 constructor 中初始化的值。

題目練習

  1. Q: 下面定義變量的語句中,會報錯的一項是?
    A: uint256 public constant x1;

  2. Q: 下面定義變量的語句中,會報錯的一項是?
    A: string immutable x7 = "hello world";

  3. Q: 下面哪一項不符合對 constant 和 immutable 的描述?
    A: constant 和 immutable 的使用並不會節省 gas

  4. 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

  5. Q: 下列哪一个变量不适合用 constant 或 immutable 来修?
    A: 合約中的 ETH 數量