WTFAcademy / WTF-Ethers

我最近在重新学ethers.js,巩固一下细节,也写一个“WTF Ethers.js极简入门”,供小白们使用,每周更新1-3讲。Now supports English! 官网: https://wtf.academy
https://wtf.academy
Other
3.03k stars 489 forks source link

请忽略 #173

Closed KevinWang12138 closed 2 months ago

KevinWang12138 commented 2 months ago

不同类型的引用变量相互赋值时,修改其中一个的值,不会导致另一个的值随之改变的是以下哪种情况: A. 合约中的storage赋值给本地的storage

B. 合约中的memory赋值给本地的memory

C. 合约中的storage赋值给本地的memory

D. 以上全部

测试了一下,B和C都不会导致另外一个的值随之改变。

KevinWang12138 commented 2 months ago

抱歉,我的测试用例有误,请忽略。 以下测试代码确实B选项中,memory赋值给memory后,修改其中一个值会导致另外一个的值改变 `contract MemoryExample { struct Data { uint value; }

function testMemoryAssignment() public pure returns (uint, uint) {
    Data memory data1 = Data(10);
    Data memory data2 = data1;

    data2.value = 20;

    return (data1.value, data2.value);
}

}`

KevinWang12138 commented 2 months ago

没有认真读题,题目是 “不同类型的引用变量相互赋值时 ” 错误的用例如下,导致我认为B选项是正确的。 首先uint不是一个引用类型而是值类型,不符合题目要求。 其次,对于值类型不可以使用memory和storage进行修饰。 `contract MemoryExample{ uint public number = 20;

function test() public view returns(uint newNumber){
    uint mid = number;
    mid = 21;
    newNumber = number;
}

}`