Как проверить, что строка или структура только со строковыми свойствами инициализирована или нет внутри сопоставления?
Согласно документам, это означает проверку того, что элемент отображения имеет 0-значение, что мне неясно, когда речь идет о строках.
contract C {
mapping (address => string) m1;
mapping (address => StringStruct) m2;
struct StringStruct {
string someString; // Always defined when initialising this struct
// There could be other string properties here...
}
function amIInBothMappings() returns (bool) {
// Check that both m1[msg.sender] and m2[msg.sender].someString are non-0
}
}
В примере: как лучше всего реализовать amIInBothMappings
проверку, которая msg.sender
не инициализирована в обоих сопоставлениях m1 и m2?
Один из способов — проверить длину строки:
if (bytes(m1[msg.sender]).length != 0 && bytes(m2[msg.sender].someString).length != 0)
// do your thing
Смотрите ответ, который я разместил здесь
Другой способ - сравнить хэши sha3 строк
if (sha3(myVariable) != sha3("")) {
// is not empty string
}
Однако этот метод, вероятно, менее эффективен.
Себи