Ethereum 在以太坊实体中,当更改数组长度时,我得到;值必须是左值;。为什么?

Ethereum 在以太坊实体中,当更改数组长度时,我得到;值必须是左值;。为什么?,ethereum,Ethereum,在Solidity中,您可以使用array.length++增加数组的大小,为新成员腾出空间。但我有一个错误: Value must be an lvalue 您可以使用“arrayname.length=;”调整存储中的动态数组(即在约定级别声明的数组)的大小,但如果出现“lvalue”错误,则可能是两种情况之一。 您可能正在尝试调整内存中数组的大小,或者 您可能正在尝试调整非动态数组的大小 重要提示:在Solidity中,数组的声明方式与您可能习惯的声明方式相反。如果您有一个>=2D数组,

在Solidity中,您可以使用array.length++增加数组的大小,为新成员腾出空间。但我有一个错误:

Value must be an lvalue

您可以使用“arrayname.length=;”调整存储中的动态数组(即在约定级别声明的数组)的大小,但如果出现“lvalue”错误,则可能是两种情况之一。 您可能正在尝试调整内存中数组的大小,或者 您可能正在尝试调整非动态数组的大小

重要提示:在Solidity中,数组的声明方式与您可能习惯的声明方式相反。如果您有一个>=2D数组,其中包含一些动态组件和一些非动态组件,您可能会违反#2,并且不理解为什么。还请注意,阵列是以“正常”方式访问的。下面是这种“向后”声明范例的一些实例:

int8[][5] somearray;  // This is 5 dyn arrays, NOT a dyn array-of-arrays w/len=5
// so...
somearray[4];         // the last dynamic array
somearray[1][12];     // the 13th element of the second dynamic array
// thus...
somearray.length++;   // illegal. This array has length 5. Always.
somearray[0].length++;// legal

遇到同样的问题,我必须使用
存储
关键字,因为我试图修改全局存储阵列

bytes32[] storage someArray = someGlobalStorageArray;

如果我的可变长度数组只是临时的,应该保留为内存,该怎么办?我不能修改长度或推送新项目到它?
bytes32[] storage someArray = someGlobalStorageArray;