如果我向映射数组添加一项,我会收到此错误:如果您发送值,则被调用的函数应该是可支付的,并且您发送的值应小于当前余额,
但我的功能正在查看。我无法付款。我似乎也没有在那里添加太多逻辑。我做错了什么?
mapping(address => uint256[]) public owns;
function checkInventory() public view returns (uint256[] memory) {
require(owns[msg.sender].length != 0, "Inventory is empty");
uint256[] memory inventory;
for (uint256 i = 0; i < owns[msg.sender].length; i++) {
inventory[i] = owns[msg.sender][i];
}
return (inventory);
}
最佳答案
在这种情况下,恢复消息对于刚接触该语言的人来说有点误导。您遇到的真正问题是您收到索引越界
错误。
您应该用足够的长度初始化您的库存。
function checkInventory() public view returns (uint256[] memory) {
require(owns[msg.sender].length != 0, "Inventory is empty");
uint256[] memory inventory = new uint256[](owns[msg.sender].length); // here is the problem
for (uint256 i = 0; i < owns[msg.sender].length; i++) {
inventory[i] = owns[msg.sender][i];
}
return (inventory);
}
关于arrays - Solidity 被调用的函数应该是付费的,但它是 View 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71813049/