solidity - Solidity:在公共方法中返回数组
问题描述
我正在尝试创建一个返回数组的公共函数,这是错误
返回参数类型映射(uint256 => struct ItemList.Item storage ref)不能隐式转换为预期类型(第一个返回变量的类型)uint256[] 内存。
pragma solidity ^0.5.0;
contract ItemList {
uint public itemCount = 0;
mapping(uint256 => Item) public items;
event ItemCreated (
uint id,
string proofdocument
);
struct Item {
uint id;
string proofdocument;
}
constructor() public {
}
function createItem(string memory _proofdocument) public {
itemCount++;
items[itemCount] = Item(itemCount, _proofdocument);
emit ItemCreated(itemCount, _proofdocument);
}
function getItems() public pure returns(uint256[] memory ) {
return items; <----------ERROR
}
}
谢谢安德里亚
解决方案
您可以通过web3.js
库获取循环中的每个项目
const array = []
for (let i = 0; i < itemCount; itemCount += 1) {
array.push(contract.getItem(i)) // where getItem do items[I] in solidity
}
或者您可以使用pragma experimental
版本:
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
contract ItemList {
uint public itemCount = 0;
struct Item {
uint id;
string proofdocument;
}
Item[] items;
constructor() public {}
function createItem(string memory _proofdocument) public {
itemCount++;
items.push(Item(itemCount, _proofdocument));
}
function getItems() external view returns(Item[] memory) {
return items;
}
}
推荐阅读
- r - 运行一个函数,在每个中间步骤重命名数据帧,以获得数据帧列表
- c# - WPF MVVM如何创建没有输入数据的新窗口实例
- vertica - 将 orc 文件从客户端节点加载到 Vertica
- django - Django TypedChoiceField 选择从模型中插入值
- asp.net-mvc - ViewBag 像数组一样使用
- jsp - 未从请求对象中检索到值
- r - 如何使用 XML2 读取特定标签
- amazon-web-services - Chalice 生成哪种类型的 API 网关?区域优化还是边缘优化?
- java - 如何使用java api在neo4j中创建具有多个节点的节点
- nlp - 如何使用 100 万个带标签的句子从头开始实现这个 ner 模型的速度