2

我正在练习我的 Solidity 技能,虽然我确实希望得到一个错误,但我没想到这个错误

TypeError:此类型仅在新的实验性 ABI 编码器中支持。使用“pragma Experimental ABIEncoderV2;” 启用该功能。函数 getArray() 公共视图返回 (string[]) {

这是我在 Remix 中的代码:

pragma solidity ^0.4.17;

contract Test {
    string[] public myArray;

    function Test() public {
        myArray.push("hola");
    }

    function getArray() public view returns (string[]) {
        return myArray;
    }
}

这里给出了什么?

这是因为标准 ABI 不支持动态嵌套数组吗?

我只是想确认我对错误的理解。它告诉我,我当前的版本不支持函数参数和返回值中的任意嵌套数组,但在新的实验性 ABI 编码器中,这是它的意思吗?

4

1 回答 1

3

那是因为string[]

是的,因为还不支持动态嵌套数组,它仍然是实验性的。您可以通过pragma experimental ABIEncoderV2;在源代码之上添加来启用该功能。

web3 包刚刚在最新的web3 1.0.0-beta36版本中开始支持它。Truffle 仍然依赖于以前的 web3 版本,所以如果你想使用 Truffle 测试你的合约,你需要等待一段时间(大约一个月)。

于 2018-09-14T08:03:34.543 回答