Solidity

Solidity 初始化固定大小的記憶體數組

  • March 13, 2022

使用solidity 0.4.15,有一個函式接受一個數字並返回一個固定長度的數組,稱為traits

function splitN(uint256 n) constant returns (uint8[12]) {
   uint8[12] memory traits = new uint8[12];
   // alter values in traits ...
   return traits;
}

但是這種初始化方式traits無法編譯,錯誤如下:

.../Genes.sol:28:39: TypeError: Length has to be placed in parentheses after the array type for new expression.
       uint8[12] memory traits = new uint8[12];
                                     ^-------^
,.../Genes.sol:28:9: TypeError: Type function (uint256) returns (uint8[12] memory) is not implicitly convertible to expected type uint8[12] memory.
       uint8[12] memory traits = new uint8[12];

然後我嘗試按照消息提示和其他一些方法進行初始化,但我可以讓它工作的唯一方法是實際填充一個由 12 個零組成的數組:

   uint8 z = 0;
   uint8[12] memory traits = [z, z, z, z, z, z, z, z, z, z, z, z];

那麼有沒有更優雅的方式來初始化數組呢?

初始化一個空數組而不是uint8[12] memory traits = new uint8[12];使用uint8[12] memory traits;.

然後您可以更改該// alter values in traits ...部分中的數組。

function splitN(uint256 n) constant returns (uint8[12]) {
   uint8[12] memory traits;
   // alter values in traits ...
   return traits;
}

為了從記憶體中初始化一個數組,你必須這樣做:

uint8[] memory theArray = new uint8[](12) 

其中括號內的 12 是數組長度。

您還可以按如下方式初始化數組:

function getTraits() constant returns (uint8[3]){
     uint8[3] memory traits = [1,2,3];
     return traits;
   }

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