我一直在阅读关于稳健发布版本0.4.17的文章。https://github.com/ethereum/solidity/releases
以下发言之一非常有趣:
我们还进一步研究了新的ABI编码器:函数现在可以返回结构。打开它,使用实用主义实验ABIEncoderV2。它应该已经工作了,但是仍然会生成更昂贵的代码。
我一直试图在Remix中模拟这个错误,但是没有任何运气,我得到了这个错误:
“错误”:“未能解码输出:错误:不支持或无效类型: tuple”,这里是我的代码:
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;
}
}有人试过这个吗?我在这里做错什么了?提前感谢!
发布于 2017-12-27 12:08:14
是的,我们可以返回结构体。
但是仅在内部函数调用中。
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
}
}发布于 2017-10-27 15:26:34
可能值得检查Remix的“设置”菜单中的Solidity编译器版本。在我的测试中,代码似乎运行正常。所以它可能是编译器不是最新的。
发布于 2019-07-29 09:52:24
使用新的solidity编译器,这是可能的。您可能最终不得不在契约定义文件的顶部为实验性ABIEncoderV2添加实用化声明。我用的是0.5.9,工作很好。
pragma solidity ^0.5.9;
pragma experimental ABIEncoderV2;https://ethereum.stackexchange.com/questions/29365
复制相似问题