首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取嵌套结构

读取嵌套结构
EN

Ethereum用户
提问于 2018-10-04 11:03:31
回答 1查看 427关注 0票数 1

我在合同中得到了以下代码片段:

代码语言:javascript
复制
struct Brick {
    uint256 length;
    uint256 width;
    uint256 height;
}

struct Garage {
    uint256 length;
    uint256 width;
    uint256 height;
}

struct House {
    Brick[] bricks;
    Garage garage;
    bytes32 street;
    bytes32 city;
}

mapping(uint256 => House) public houses;

在不设置pragma experimental ABIEncoderV2的情况下,当我试图从houses映射读取任何值时,会得到以下错误:

代码语言:javascript
复制
error: Failed to decode output: Error: insufficient data for bytes32 type (arg="", coderType="bytes32", value="0x")

但是,如果我将Garage构造为一个数组,那么一切都很好:

代码语言:javascript
复制
0: bytes32: street 0x0000000000000000000000000000000000000000000000000000000000000000
1: bytes32: city 0x0000000000000000000000000000000000000000000000000000000000000000

这不是关于ABIEncoderV2的问题。我知道,当出现这种情况时,structs会有更多的灵活性。

为什么当属性是数组而不是简单的实例时,它才能工作呢?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-10-04 20:56:05

为什么当属性是数组而不是简单的实例时,它才能工作呢?

它可以工作,因为动态数组的处理非常类似于映射。长度存储在字段的位置,但索引的处理方式类似于映射。这也是为什么您不会将其视为返回结构的一部分(尽管我希望至少看到返回的长度)。

有关详细信息,请参阅https://solidity.readthedocs.io/en/develop/miscellaneous.html#layout-of-state-variables-in-storage

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/59974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档