gpt4 book ai didi

solidity - 成员 "push"在存储之外的 bool[] 内存中不可用

转载 作者:行者123 更新时间:2023-12-05 09:02:29 26 4
gpt4 key购买 nike

我正在尝试在 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;
}
}

但是抛出如下错误:

Member "push" is not available in bool[] memory outside of storage.

我已经想出如何使用以下方法解决此问题:

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;
}
}

但我不明白这种行为,为什么内存阵列不允许“推送”?

最佳答案

可以使用 new 运算符创建具有动态长度的内存数组。与存储数组相反,无法调整内存数组的大小(例如,.push 成员函数不可用)。您要么必须提前计算所需的大小,要么创建一个新的内存数组并复制每个元素。 https://docs.soliditylang.org/en/v0.8.12/types.html#allocating-memory-arrays

关于solidity - 成员 "push"在存储之外的 bool[] 内存中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71360830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com