Ethereum Solidity 0.5.0:TypeError常量变量的初始值必须是编译时常量
为什么我不能以0.5.0的实度这样声明一个常数?在最新版本中,一切都很顺利:Ethereum Solidity 0.5.0:TypeError常量变量的初始值必须是编译时常量,ethereum,solidity,Ethereum,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; } 在
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;
}
在实体中,常数不会存储在任何地方;它们在字节码中被替换。大概是这样的:
constant uint256 FOO = 42;
function blah() {
return FOO;
}
变成这样:
function blah() {
return 42;
}
只有在编译时知道常量的值时,编译器才能执行此替换。在您的示例中,如果
\u decimals
是一个常量,理论上编译器可以计算出decimals()
返回一个常量以及该值是什么,但Solidity编译器远没有那么智能。在Solidity中,常量不会存储在任何地方;它们在字节码中被替换。大概是这样的:
constant uint256 FOO = 42;
function blah() {
return FOO;
}
变成这样:
function blah() {
return 42;
}
只有在编译时知道常量的值时,编译器才能执行此替换。在您的示例中,如果\u decimals
是一个常量,理论上编译器可以计算出decimals()
返回一个常量以及该值是什么,但Solidity编译器远没有那么聪明