Вы можете изменить размер динамического массива в памяти (т.е. массив, объявленный на уровне контракта) с «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
Что делать, если массив переменной длины является временным и должен оставаться в памяти? я не могу изменить длину или нажать на нее новый элемент? – okwme