Soliditede, array.length ++ kullanarak yeni üyeye yer açmak için bir dizinin boyutunu artırabilirsiniz. Ama bir hata alıyorum:Ethereum Solidity'de, bir dizi uzunluğunu değiştirirken "Değer bir değer olmalıdır". Niye ya?
Value must be an lvalue
Soliditede, array.length ++ kullanarak yeni üyeye yer açmak için bir dizinin boyutunu artırabilirsiniz. Ama bir hata alıyorum:Ethereum Solidity'de, bir dizi uzunluğunu değiştirirken "Değer bir değer olmalıdır". Niye ya?
Value must be an lvalue
Sen depoda dinamik bir dizi boyutlandırabilirsiniz (yani sözleşme düzeyinde bildirilen bir dizi) “arrayname.length =;” ile Ama “lvalue” alırsanız hata Muhtemelen iki şeyden birini yanlış yapıyorsun. numaralı bellekte veya numaralı dizilerde bir diziyi yeniden boyutlandırmaya çalışıyor olabilirsiniz dinamik olmayan dizisini yeniden boyutlandırmaya çalışıyor olabilirsiniz.
int8[] memory somearray; // CASE 1
somearray.length++; // illegal
int8[5] somearray; // CASE 2
somearray.length++; // illegal
ÖNEMLİ NOT: sağlamlığı içinde, diziler muhtemelen bunları ilan için kullanılan konum şekilde geriye doğru beyan edilir. Ve bazı dinamik ve bazı dinamik olmayan bileşenlerle bir> = 2D diziniz varsa, # 2'yi ihlal edebilir ve nedenini anlayabilirsiniz. Ayrıca dizilere “normal” yoldan erişildiğini unutmayın. İşte en bu "geri" beyan paradigmasının bazı örnekler eylem şunlardır:
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
Karşılaşılan aynı sorun ve ne zorunda ben küresel bir depolama dizisini değiştirmeye çalışıyordu beri storage
anahtar kelime kullanmak oldu.
bytes32[] storage someArray = someGlobalStorageArray;
Değişken uzunluktaki dizim geçici mi ve bellek olarak mı kalmalı? Uzunluğunu değiştiremem ya da yeni bir öğeyi ona itemem? – okwme