У меня есть такая структура:
struct fooStruct {
uint foo;
uint figther;
}
Я хотел бы инициализировать эту структуру, но она будет храниться не в сопоставлении, а внутри массива.
Есть ли способ инициализировать структуру, например
fooStruct myStruct = fooStruct.new(par1,2,3)
Да, просто используйте
fooStruct myStruct = fooStruct(1,2);
Или же
fooStruct myStruct = fooStruct({foo:1, fighter:2});
Или же
fooStruct memory myStruct; // for temporary data
myStruct.figther = 2; // will only write to memory
fooStruct storage myStruct = ...; // for persistent data, has to be initialized from a state variable. `storage` is the default and a warning will be thrown by Solidity compiler versions starting with 4.17
myStruct.fighter = 2; // will write directly to storage
Дополнительные примеры см. в документации
fooStruct myStruct = fooStruct();
myStruct.figther = 2;
?@Tjaden
, Что делать, если один из членов является необязательным. Как следует определять структуру или присваивать изменения? Например: если я хочу, чтобы боец имел предопределенное значение или NULL
значение.0
равно значению для этого типа ( 0
для целых чисел, false
для логических значений и т. д.). Если вы хотите иметь значение «по умолчанию», отличное от значения «0», вы можете либо иметь логическое значение, указывающее, что значение было установлено на «0», а не по умолчанию на 0. Вы также можете использовать трюк где вы используете самый значащий бит каждого значения в качестве «установленного» бита, а затем просто используете остальные, как для фактического значения.filter
/ first
, которые принимают лямбда-предикат?
Пол С