Was ist die Länge eines Arrays von Struct?

Ich habe einen Wallet-Vertrag abgeschlossen, um alle Token zu speichern, die ein Konto besitzt.

Es gibt ein mapping(address=>TokenInfo[]), und addressbezieht sich auf das Konto, TokenInfo[] gespeicherte Token, die dieses Konto hält. TokenInfo ist ein Array von TokenInfo-Strukturen, in denen tokendie Token-Adresse steht, existdh ob das Token dem Array hinzugefügt wurde.

contract Wallet {
    struct TokenInfo {
        IERC20Token token;
        uint exist;//0 means unregistered
    }

    mapping(address=>TokenInfo[]) public tokenList;

    function Wallet() {

    }

    function addToken(address _account, IERC20Token _token) public {
        for (uint i = 0; i < tokenList[_account].length; i++) {//seems didn't enter the loop
            if (tokenList[_account][i].exist == 0) {
                var tokenInfo = TokenInfo(_token, 1);
                tokenList[_account].push(tokenInfo);
            }
        }
    }

    function getTokenListLength(address _account) public constant returns (uint) {
        return tokenList[_account].length;
    }
}

Aber wenn ich addToken()die Funktion aufrufe, hat es nicht funktioniert. Es scheint, dass es nie in die Schleife eingetreten ist.

Antworten (1)

Der Standardwert in einer Zuordnung für ein Array ist ein leeres Array.

In Ihrem Fall bedeutet dies tokenList[_account].lengthgleich 0.

Und die Schleife wird nie betreten, weil die Bedingung falsch i < tokenList[_account].lengthwird .0 < 0