Solidity
如何將數組的所有項複製到不同大小的動態數組中?
當我嘗試將數組儲存在另一個數組中時遇到問題。執行時出現錯誤
store
:transact to MyContract.store errored: VM error: revert.
我需要第二個數組,因為在下一步中我想向它推送更多值(
_arr.push()
)。但是我在編譯期間已經收到錯誤(TypeError: Member "push" is not available in address[] memory outside of storage.
)。因此,我
_arr
直接使用長度創建:uint256[] memory _arr = new uint256[](myVal.length+1);
然後將新值直接儲存到最後一個位置(_arr[_arr.length-1] = 42;
)(我在下面的範例中省略了它,因為沒有這條線它已經無法工作!)。有誰知道我目前缺少什麼,或者是否有替代方法?
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; contract MyContract { uint256[] myVal; uint256[] _arr; function store(uint256 _myVal) public { myVal.push(_myVal); for(uint256 _y = 0; _y < myVal.length; _y++){ _arr[_y] = myVal[_y]; } } function retrieve() public view returns (uint256[] memory) { return _arr; } }
已經提前感謝了:)
我不太了解這個想法的深度,但也許這個選項會有所幫助:
function store(uint256 _myVal) public { myVal.push(_myVal); for(uint256 _y = 0; _y < myVal.length; _y++) if(_y<_arr.length) _arr[_y]=myVal[_y]; else _arr.push(myVal[_y]); }