Solidity
Solidity 中的常量和不可變關鍵字有什麼區別?
Solidity 中的常量和不可變關鍵字有什麼區別,如何使用它們?
兩者
immutable
和constant
都是可用於狀態變數的關鍵字,以限制對其狀態的修改。不同的是,constant
變數編譯後永遠不能改變,而immutable
變數可以在建構子中設置。從文件:
狀態變數可以聲明為常量或不可變。在這兩種情況下,變數在合約建構後都不能修改。對於常量變數,值必須在編譯時固定,而對於不可變變數,它仍然可以在構造時賦值。
範常式式碼片段如下:
pragma solidity >0.6.4 <0.7.0; contract C { uint constant X = 32**22 + 8; string constant TEXT = "abc"; bytes32 constant MY_HASH = keccak256("abc"); uint immutable decimals; uint immutable maxBalance; address immutable owner = msg.sender; constructor(uint _decimals, address _reference) public { decimals = _decimals; // Assignments to immutables can even access the environment. maxBalance = _reference.balance; } function isBalanceTooHigh(address _other) public view returns (bool) { return _other.balance > maxBalance; } }
需要注意的是,編譯器不會為這些變數保留儲存槽,並且每次出現都會被相應的值替換。