Solidity
Solidity 初始化固定大小的記憶體數組
使用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; }