Solidity
為什麼我不能在 Solidity 中使用多個動態大小的變數?
以下程式碼段不起作用。
pragma solidity ^0.4.11; contract Test1 { uint[] public a; uint[] public b; function putX(uint x) public { a.push(x); b.push(block.number); } function getA() public view returns (uint[]) { return a; } function getB() public view returns (uint[]) { return b; } }
輸出:
> test1.putX.sendTransaction(11, {from: eth.accounts[0]}) > test1.getA() [] > test1.getB() []
相比之下,以下程式碼片段有效。
pragma solidity ^0.4.11; contract Test2 { uint[2][] public a; function putX(uint x) public { a.push([x, block.number]); } function getA() public view returns (uint[2][]) { return a; } }
輸出:
> test2.putX.sendTransaction(12, {from: eth.accounts[0]}) > test2.getA() [[12, 1151]]
我想知道為什麼…我正在使用最新的穩定 geth (1.7)
我還嘗試使用動態大小的數組 + 映射,但它也不起作用。
我什至懷疑官方文件中的程式碼是否可以工作,因為它使用了多個動態大小的變數:
https://solidity.readthedocs.io/en/develop/solidity-by-example.html
有誰知道為什麼會這樣?
我已經用 remix、geth v1.7.2 和 v1.7.3 嘗試了你的程式碼,它都按預期工作。
也許您的問題是在交易被探勘之前進行查詢。這將導致合約返回之前的狀態。