我试着做这样的事情:
mapping (uint256 =>string) public example;然后在构造函数中初始化“示例”
example[0]="apple";
example[1]="peach";然后我定义了这样一个变量
string fruit=example[1];然而:当‘示例’被成功初始化时,“水果”永远不会收到任何值。(部署工作正常-编译器(混合)不会显示任何错误。我检查了所有东西的拼写,比如10倍)
请帮帮我!
发布于 2023-04-19 07:53:45
如果您声明一个局部变量,您应该使用memory (例如,带有硬帽子日志):
import "hardhat/console.sol";
contract Foo {
mapping (uint256 => string) public example;
constructor () {
example[0] = "apple";
example[1] = "peach";
}
function foo () external {
string memory fruit = example[1];
console.log("Fruit is:", fruit);
}
}发布于 2023-04-19 07:32:22
由于solidity的编译器如何解决指令,fruit是一个状态变量,所以当您初始化它时,example[1]的值是空的,因为构造函数是在状态变量初始化后调用的。要解决这个问题,您可以将结果定义为状态变量,并在构造函数中初始化它,例如:
mapping (uint256 =>string) public example;
string fruit;
constructor(){
example[0]="apple";
example[1]="peach";
fruit = example[1];
}这样水果的初始化就正确了。如果有帮助,请接受并投赞成票。
https://ethereum.stackexchange.com/questions/149178
复制相似问题