Глава 3
____________________________________
[ 70 ]
___________________________________
//вызовет исключение во время компиляции,
//так как myArray4 не может быть
//назначен комплексному типу, хранящемуся в памяти
uint8[2] myArray4 = [1, 2];
}
}
Вам будет полезно знать о некоторых тонкостях работы с массивами:
массивы имеют свойство
length
. Вы можете присвоить свое значение свойству
length
, чтобы изменить размер массива. Однако вы не можете изменить размер
массива, хранящегося в памяти, или размер статического массива;
если вы попытаетесь обратиться к несуществующему индексу, это вызовет ис-
ключение.
Запомните, что массивы, структуры и таблицы сопоставлений не могут быть па-
раметрами функций, а также не могут быть возвращены функциями.
Строки
В Solidity существует два способа создать строки: используя объявления
bytes
и
string
. Объявление
bytes
применяется для создания неформатированной строки,
а
string
— для создания строки в кодировке UTF-8. Длина строки всегда динами-
ческая.
В листинге 3.3 приведен пример синтаксиса строк.
Листинг 3.3. Пример синтаксиса при использовании строк
contract sample{
//создаем пустую строку myString
string myString = "";
//создаем неформатированную строку
bytes
myRawString;
function sample(string initString, bytes rawStringInit){
myString
=
initString;
//myString2 содержит указатель на myString
string
myString2
=
myString;
//myString3 - это строка в памяти
string memory myString3 = "ABCDE";
Разработка
смарт-контрактов
____________________________________
[ 71 ]
___________________________________
//меняем длину и содержимое строки
myString3
=
"XYZ";
//присваиваем значение неформатированной строке
myRawString
=
rawStringInit;
//увеличиваем
длину
myRawString
myRawString.length++;
//вызовет
исключение
при
компиляции,
//потому что строка расположена не в памяти
string
myString4
=
"Example";
//вызовет
исключение
при
компиляции
string
myString5
=
initString;
}
}
Структуры
Solidity поддерживает структуры. В листинге 3.4 приведен пример синтаксиса при
использовании структур.
Листинг 3.4. Пример синтаксиса при использовании структур
contract sample{
struct myStruct {
bool
myBool;
string
myString;
}
myStruct
s1;
myStruct s2 = myStruct(true, ""); //синтаксис структурного метода
function sample(bool initBool, string initString){
//создаем экземпляр структуры в хранилище (storage)
s1
=
myStruct(initBool,
initString);
//создаем экземпляр в памяти (memory)
myStruct memory s3 = myStruct(initBool, initString);
}
}
Учтите, что параметр функции не может быть структурой, и функция не может
возвращать структуру.
Do'stlaringiz bilan baham: |