Contract-Debugging
用 for 循環編寫數組不起作用
我正在嘗試使用數組在卡片組中填充值從 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 看起來像不穩定的數組。拿你的
response
andresponse.toString(10)
讀一個人類可讀的數字。此外,它是非同步的。
如果您使用松露
instance.deck().then(function(response) { // console.log(response.toString(10)); });
如果不是松露,我相信
instance.deck(function(error, response) { // console.log(response.toString(10)); });
在不使用 truffle 時,我對合約訪問方法有點粗略,所以也許善良的靈魂會糾正任何明顯的錯誤。
希望能幫助到你。