为什么我不能以这种方式在Solidity 0.5.0中声明一个常量?使用最新版本,一切都很好:
uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals()));
/**
* @return the number of decimals of the token.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
答案 0 :(得分:2)
在Solidity中,常量不会存储在任何地方的存储中;它们被替换为字节码。大概是这样的:
constant uint256 FOO = 42;
function blah() {
return FOO;
}
变成这样:
function blah() {
return 42;
}
仅当常量值在编译时为 时,编译器才能执行此替换。在您的示例中,如果_decimals
是一个常数,则从理论上讲,编译器可能会发现decimals()
返回一个常数以及该值是什么,但是Solidity编译器远没有那么聪明。>