Solidity

給定函式參數初始化固定大小的儲存數組

  • August 14, 2020

我想在我的合約儲存中儲存一個固定大小的數組,具有使用者定義的大小,初始化為全 0。這是一個範例契約:

pragma solidity ^0.4.24;

contract Test {
   constructor(uint size) {
       uint[size] storage arr;
       for (uint i = 0; i < size; i++) { arr[i] = 0 }
   }
}

聲明數組時出現我的問題;remix 給出了這個錯誤:

TypeError: Invalid array length, expected integer literal or constant expression.

一種解決方法是在函式之外聲明數組,但這將要求它是一個沒有立即可訪問元素的動態數組,這是我不想要的。

是否可以在建構子中初始化這種類型的數組,如果可以,如何?

做同樣的事情的替代方法是什麼?

我想你不會喜歡這個答案,但無論如何。

不,你不能。

我意識到這是一個人為的例子,但對數組的迭代也是一種反模式。您沒有解釋您對動態數組的厭惡,並且在沒有進一步了解案例的情況下,不可能知道映射是否可能更合適,或者如何重構函式以確保在任何規模上的 O(1)。

希望能幫助到你。

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