【发布时间】:2022-01-04 16:37:29
【问题描述】:
我一直在学习 Solidity 的新旅程。现在我进入了结构+数据位置课程,当我没有使用与讲师完全相同的示例时,我遇到了一种情况,两者都有效。我想知道哪一个在技术上更正确。
关于讲师的做法,我知道如果该数据变量已经存在并填充了数据,并且我们在存储上使用它,那是可以理解的,但对于内存案例,我仍然不明白它的含义。
这里有两个例子:
我的:
struct PERSON {
uint256 id;
string name;
}
PERSON public personList;
function updateNewPerson(uint256 _index, string memory _name) public {
PERSON memory newUpdatedPerson;
newUpdatedPerson.name = _name;
personList[_index] = newUpdatedPerson;
}
导师代号:
struct PERSON {
uint256 id;
string name;
}
PERSON public personList;
function updateNewPerson(uint256 _index, string memory _name) public {
PERSON memory newUpdatedPerson = personList[index];
newUpdatedPerson.name = _name;
personList[_index] = newUpdatedPerson;
}
这与我要引用的存储数据位置的示例相同:
function updateStoragePerson(uint256 _index, string memory _name) public {
PERSON storage newUpdatedPerson = personList[_index];
newUpdatedPerson.name = _name;
}
我试图弄清楚那里有什么不同,我想我已经开始理解它了,如果我错了,请纠正我。
所以在我的示例中,我基本上只是传递新用户插入新值,在本例中为 _name,然后在将其返回给数组时,通过索引数组将其传递到其位置。
在讲师示例中,他正在传递数组索引案例内容,即 id 和 name,然后在将数据传回数组之前从函数中插入新的 name 值,在这种情况下 id 和 _name 是一样的。
【问题讨论】:
标签: memory blockchain ethereum solidity smartcontracts