首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实体中返回新版本的结构

在实体中返回新版本的结构
EN

Ethereum用户
提问于 2017-10-27 13:10:37
回答 3查看 4.7K关注 0票数 8

我一直在阅读关于稳健发布版本0.4.17的文章。https://github.com/ethereum/solidity/releases

以下发言之一非常有趣:

我们还进一步研究了新的ABI编码器:函数现在可以返回结构。打开它,使用实用主义实验ABIEncoderV2。它应该已经工作了,但是仍然会生成更昂贵的代码。

我一直试图在Remix中模拟这个错误,但是没有任何运气,我得到了这个错误:

“错误”:“未能解码输出:错误:不支持或无效类型: tuple”,这里是我的代码:

代码语言:javascript
复制
pragma solidity ^0.4.17;
pragma experimental ABIEncoderV2;
contract StructTest{
    struct someTestStruct {
        uint A;
        uint B;
        bytes32 C;
    }
    someTestStruct str;
    function StructTest(){
        str = someTestStruct({A: 5, B: 6, C: "Hi"});
    }
    // trying to get struct but getting "error": "Failed to decode output: Error: Unsupported or invalid type: tuple"
    function returnStruct() returns (someTestStruct){
        return str;
    }
}

有人试过这个吗?我在这里做错什么了?提前感谢!

EN

回答 3

Ethereum用户

回答已采纳

发布于 2017-12-27 12:08:14

是的,我们可以返回结构体。

但是仅在内部函数调用中

代码语言:javascript
复制
pragma solidity ^0.4.19;

contract tester{

struct Person
{
    string name;
    uint age;
}

function getSome() public returns (Person a)
{
    Person memory p;
    p.name = "kashish";
    p.age =20;
    return p;
}

function wantSome() public returns (string,uint)
{
     Person memory p2 =getSome();
     return (p2.name,p2.age); // return multiple values like this
}
}
票数 6
EN

Ethereum用户

发布于 2017-10-27 15:26:34

可能值得检查Remix的“设置”菜单中的Solidity编译器版本。在我的测试中,代码似乎运行正常。所以它可能是编译器不是最新的。

票数 0
EN

Ethereum用户

发布于 2019-07-29 09:52:24

使用新的solidity编译器,这是可能的。您可能最终不得不在契约定义文件的顶部为实验性ABIEncoderV2添加实用化声明。我用的是0.5.9,工作很好。

代码语言:javascript
复制
pragma solidity ^0.5.9;
pragma experimental ABIEncoderV2;
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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