我正在尝试在 Solidity 中进行简单的推送操作。如下面函数 isArrayEven() 的代码所示:
pragma solidity ^0.8.12;
contract Test {
uint[] public arr = [uint(1), 2, 3, 4, 5, 6, 7, 8 ,9];
function isArrayEven() public view returns(bool[] memory) {
bool[] memory ret;
for (uint i = 0; i < arr.length; i++) {
ret.push((arr[i]%2 == 0));
}
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
但会抛出以下错误:
成员“push”在存储之外的 bool[] 内存中不可用。
我已经弄清楚如何通过使用以下方法来解决此问题:
pragma solidity ^0.8.12;
contract Test {
uint[] public arr = [uint(1), 2, 3, 4, 5, 6, 7, 8 ,9];
function isArrayEven() public view returns(bool[] memory) {
bool[] memory ret = new bool[](arr.length);
for (uint i = 0; i < arr.length; i++) {
ret[i] = (arr[i]%2 == 0);
}
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
但我不明白这种行为,为什么内存数组不允许“推送”?
小智 11
可以使用 new 运算符创建具有动态长度的内存数组。与存储数组相反,无法调整内存数组的大小(例如,.push 成员函数不可用)。您要么必须提前计算所需的大小,要么创建一个新的内存数组并复制每个元素。 https://docs.soliditylang.org/en/v0.8.12/types.html#alaving-memory-arrays
| 归档时间: |
|
| 查看次数: |
10208 次 |
| 最近记录: |