Standardwert einer Struktur

Betrachten Sie den folgenden Vertrag in Solidity:

pragma solidity ^0.4.2;

contract Registry {
    struct Name {
        string first;
        string last;
    }

    mapping(address => Name) reg;

    function newName(string first, string last) {
        address sender = msg.sender;

        if(reg[sender] != 0) {
            throw;
        }

        reg[sender].first = first;
        reg[sender].last = last;
    }
}

In der ifobigen Anweisung, die falsch ist, möchte ich überprüfen, ob die Struktur Namedefiniert ist oder sich noch im Standardwert befindet, wobei alle Felder auf Null initialisiert sind. Gibt es dafür einen Sprachoperator?

Antworten (3)

Ich würde mit:

if (reg[sender].first != "" || reg[sender].last != "") {
    Wurf;
}

Es gibt keinen Operator, aber Sie können die Länge beider Zeichenfolgen gegen Null prüfen:

if (bytes(reg[sender].first).length != 0 || bytes(reg[sender].last).length != 0) { throw; }

Hinweis: Verwendung von ||

Verwandt:

Um diese Antwort auf die neueste Version von Solidity zu aktualisieren. Versuche Folgendes: require(reg[sender].first && reg[sender].last);