Solidity

返回數組未顯示推送值

  • May 31, 2019

這一定是個愚蠢的問題,但作為一個新學習者,我正在嘗試深入理解數組,並在混音中執行此程式碼,在 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;
   }
}

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/71325