Arrays

如何在 Solidity 中手動初始化數組?

  • March 21, 2017

我找不到手動初始化數組的方法。

string[] public cool;

function constructor() {
   cool[0] = "one";
}

不會執行,而

function constructor(){
   cool[cool.length++] = "one";
}

將要。

背後的原因可能是什麼?

您不能將值分配給大小為 0 的數組,您需要有足夠的空間來寫入您的值。確實,您聲明了一個可變大小的數組,但您仍然需要告訴 VM 在分配之前增加數組大小。

您可以增加數組大小並以不同方式分配值:

  1. 使用push方法的多合一(增加和設置,我的首選),如下所示:
cool.push("one");
  1. 使用兩個命令,設置長度屬性,然後設置值
cool.length = 1;
cool[0] = "one";

在不知道的情況下,您實際上使用了第二種方式並手動初始化了數組長度。實際上,使用cool.length++you 將數組大小增加到 1,然後,您將 0 作為鍵傳遞給數組(注意您傳遞了 0 而不是 1,因為您在長度變數之後而不是之前使用了 ++)。所有這些都可以讓您在數組的第一個位置正確分配“一個”字元串。

除此之外,還有兩個建議:

  • 如果您不想過多地處理數組大小,請查看**映射。**你可以這樣做:
mapping (int=>string) public cool;
function testMapping() {
   cool[3] = "hello";
   cool[33] = "world";
   cool[333] = "!!";
}

無需擔心尺寸。

  • 不要使用建構子作為方法名,這可能會產生誤導。如果你真的需要一個合約建構子,它必須被命名為合約名稱。如果您需要一個 init 函式,請將其命名為 init()。

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