2015-11-21 1 views

ответ

8

Вы можете изменить размер динамического массива в памяти (т.е. массив, объявленный на уровне контракта) с «arrayName.length =;» Но если вы получите «именующее выражение» ошибка , вы, вероятно, делаете одно из двух неправильных действий. Возможно, вы пытаетесь изменить размер массива в памяти, или Возможно, вы попытаетесь изменить размер нединамического массива.

int8[] memory somearray;  // CASE 1 
somearray.length++;   // illegal 

int8[5] somearray;   // CASE 2 
somearray.length++;   // illegal 

ВАЖНО: В солидности, массивы объявляются в обратном направлении от того, как вы, вероятно, используется для объявления их. И если у вас есть массив> = 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 
+0

Что делать, если массив переменной длины является временным и должен оставаться в памяти? я не могу изменить длину или нажать на нее новый элемент? – okwme

0

Встречающиеся же вопрос, и что я должен был был использовать storage ключевое слово, так как я пытался изменить глобальный массив хранения данных.

bytes32[] storage someArray = someGlobalStorageArray;