首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从映射值初始化字符串变量不起作用

从映射值初始化字符串变量不起作用
EN

Ethereum用户
提问于 2023-04-19 07:00:28
回答 2查看 23关注 0票数 0

我试着做这样的事情:

代码语言:javascript
复制
mapping (uint256 =>string) public example;

然后在构造函数中初始化“示例”

代码语言:javascript
复制
example[0]="apple";
example[1]="peach";

然后我定义了这样一个变量

代码语言:javascript
复制
string fruit=example[1];

然而:当‘示例’被成功初始化时,“水果”永远不会收到任何值。(部署工作正常-编译器(混合)不会显示任何错误。我检查了所有东西的拼写,比如10倍)

请帮帮我!

EN

回答 2

Ethereum用户

回答已采纳

发布于 2023-04-19 07:53:45

如果您声明一个局部变量,您应该使用memory (例如,带有硬帽子日志):

代码语言:javascript
复制
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);
    }
}
票数 0
EN

Ethereum用户

发布于 2023-04-19 07:32:22

由于solidity的编译器如何解决指令,fruit是一个状态变量,所以当您初始化它时,example[1]的值是空的,因为构造函数是在状态变量初始化后调用的。要解决这个问题,您可以将结果定义为状态变量,并在构造函数中初始化它,例如:

代码语言:javascript
复制
mapping (uint256 =>string) public example;
    string fruit;

    constructor(){
        example[0]="apple";
        example[1]="peach";
        fruit = example[1];
    }

这样水果的初始化就正确了。如果有帮助,请接受并投赞成票。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/149178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档