Contract-Debugging

用 for 循環編寫數組不起作用

  • April 25, 2018

我正在嘗試使用數組在卡片組中填充值從 0 到 51 的卡片數組。它似乎不起作用,我總是得到一個空數組。即使我嘗試了相當大的氣體限制值,這是否是氣體的問題。這是我的程式碼:

contract Blackjack {

  uint[52] public deck;

  function Blackjack() public {

      for (uint i = 0; i < 52; i++) {
           deck[i] = i;
      }
   }
}

編輯:我剛剛意識到在 remix 中呼叫免費 getter 時需要提供參數。我期待它會返回整個數組,所以這不是一個真正的問題。感謝所有提供幫助的人,很抱歉浪費了您的時間。

您的契約按原樣工作,警告和所有。您可以在 Remix 中看到這一點。

在此處輸入圖像描述

如果它對客戶端有幫助,您可以呼叫從public. 它看起來類似於勞裡的想法:

function getit(uint row) public view returns (uint) {
   return deck[row];
}

如果您沒有收到這些值(一次一個),請關注客戶端。

此外,您可能會驚訝地從 Web3 收到一個奇怪的數組(也許這是“它”)。它將採用 BigNumber 格式。https://github.com/ethereum/wiki/wiki/JavaScript-API#a-note-on-big-numbers-in-web3js

BigNumbers 看起來像不穩定的數組。拿你的responseandresponse.toString(10)讀一個人類可讀的數字。

此外,它是非同步的。

如果您使用松露

instance.deck().then(function(response) { // console.log(response.toString(10)); });

如果不是松露,我相信

instance.deck(function(error, response) { // console.log(response.toString(10)); });

在不使用 truffle 時,我對合約訪問方法有點粗略,所以也許善良的靈魂會糾正任何明顯的錯誤。

希望能幫助到你。

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