Solidity
返回數組未顯示推送值
這一定是個愚蠢的問題,但作為一個新學習者,我正在嘗試深入理解數組,並在混音中執行此程式碼,在 ropsten 平台上編譯和部署合約。我想看看我最後返回的數組值。但是呼叫 getA 函式什麼也沒得到。我正在元遮罩中進行交易。
pragma solidity 0.5.1; contract SolArray{ uint[] a; function getA() constant returns (uint[] memory){ a.push(123); return a; } }
我看不出這將如何編譯,因為
constant
在 0.5.1 中已棄用。無論如何,
constant
如果您希望更改儲存狀態,請刪除,因為“只讀”是不合適的。如果這聽起來很神秘,請看這裡:https ://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2以及何時使用“View”和“Pure” “常數”您將獲得交易雜湊而不是您的數組,並且您需要另一個函式來返回該數組。你可以用
public
.試試這樣:
pragma solidity 0.5.1; contract SolArray { uint[] public a; function pushA(uint value) public { a.push(value); } }
您將看到
function a()
要求返回行/索引。這是可擴展的模式,在任何規模下都將具有一致的 gas 成本。客戶端將迭代數組以獲取所有行。為了使它更像您的原始程式碼,您可以添加一個函式來返回整個數組,並帶有警告:這是不可擴展的。當返回整個事物的 gas 成本超過塊 gasLimit 時,它將停止工作。
pragma solidity 0.5.1; contract SolArray { uint[] public a; function pushA(uint value) public { a.push(value); } function getAll() public view returns(uint[] memory) { return a; } }
希望能幫助到你。