¿Cómo verificar que una cadena, o una estructura con solo propiedades de cadena, se inicialice o no, dentro de un mapeo?
De acuerdo con los documentos, significa verificar que el elemento de la asignación esté en su valor 0, lo que no me queda claro cuando se habla de cadenas.
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
}
}
En el ejemplo: ¿cuál es la mejor manera de implementar amIInBothMappings
que las comprobaciones msg.sender
no estén inicializadas en las asignaciones m1 y m2?
Una forma es comprobar la longitud de una cadena:
if (bytes(m1[msg.sender]).length != 0 && bytes(m2[msg.sender].someString).length != 0)
// do your thing
Otra forma es comparar los hashes sha3 de las cadenas.
if (sha3(myVariable) != sha3("")) {
// is not empty string
}
Sin embargo, este método es probablemente menos eficiente.
Sebí