Arrays
如何在 Solidity 中手動初始化數組?
我找不到手動初始化數組的方法。
string[] public cool; function constructor() { cool[0] = "one"; }
不會執行,而
function constructor(){ cool[cool.length++] = "one"; }
將要。
背後的原因可能是什麼?
您不能將值分配給大小為 0 的數組,您需要有足夠的空間來寫入您的值。確實,您聲明了一個可變大小的數組,但您仍然需要告訴 VM 在分配之前增加數組大小。
您可以增加數組大小並以不同方式分配值:
- 使用push方法的多合一(增加和設置,我的首選),如下所示:
cool.push("one");
- 使用兩個命令,設置長度屬性,然後設置值
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()。