Solidity

無法將值分配給函式內數組的 0 索引

  • October 24, 2022

所以,我在數組上嘗試了 3 個簡單的程式碼

// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

contract test{
   uint[] public x;

   function testing() public {
       x[0] = 20;
   }
}

這會引發錯誤,但如果我使用 x.push(20) 而不是 x

$$ 0 $$= 20 然後它工作或….. 如果我將數組聲明為

uint[3] public x; 

然後使用 x

$$ 0 $$= 20 函式內部 那麼它的工作原理……或者……如果我把它寫成:

uint[] public x = [1,2,3];

並使用 x

$$ 0 $$= 20 函式內部 然後它也可以工作……我不明白它背後的機制

那是因為當你聲明它時你的數組的大小為零

uint[] public x;

所以第零個索引不存在,它會引發錯誤。當您使用顯式長度定義數組時,它不會給出任何錯誤,因為確實存在第零個索引。如果要使用動態數組,請嘗試使用:

x.push()

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