我是个生疏的新手。下面是简单的Solidity源代码
pragma solidity ^0.4.21;
contract CAT {
event XYZ (uint Z ) ;
uint[] x;
uint a ;
function f(uint[] memoryArray) public returns (uint[] ){
x = memoryArray;
uint[] y = x;
y.length = 2 ; // line 1
a = y.length ;
emit XYZ ( a );
return x ;
}
}我用Remix。我部署了合同,并且能够输入memoryArray1的值。

但是,我使用了事件,并发出了这样的想法:在部署之后,我将在左侧的混合中看到a的值,但是没有任何类似的东西显示出来。这意味着我完全遗漏了一些东西。谁能让我知道我需要添加什么,这样我也可以看到一个在混合中的价值。
发布于 2022-08-13 10:21:03
如果您想在智能契约之外显示值(在这种情况下,可以在remix中看到它),则必须使用view关键字。它是只读函数,它确保状态变量在调用它们之后不会被修改.
重要:最佳实践表明,您必须只使用view函数来读取智能契约中的变量。
在本例中,您在读取数组之前实现了一个逻辑,您将为这个操作花费更多的气体。
您可以考虑实现允许读取数组值的getter()函数的选项。
调整原始智能合同的示例如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.4.21;
contract CAT {
event XYZ (uint Z ) ;
uint[] x;
uint a ;
function f(uint[] memoryArray) public {
x = memoryArray;
uint[] storage y = x;
y.length = 2;
a = y.length;
emit XYZ (a);
}
// NOTE: Getter() function
function getValue() external view returns(uint[]) {
return x;
}
}https://ethereum.stackexchange.com/questions/133539
复制相似问题