Wie initialisiert man eine Zuordnung einer Struktur innerhalb einer Funktion?

Zuordnungen werden normalerweise im oberen Teil des Vertrags deklariert, aber gibt es eine Möglichkeit, eine Zuordnung - die zu einer Struktur gehört - in einer Funktion zu instanziieren?

Antworten (1)

So habe ich es hinbekommen:

pragma solidity ^0.4.24;

contract FancyContract {
    struct FancyStruct {
         address from;
         address to;
         mapping (address => uint256) balances;
    }

    FancyStruct public fancyStruct;

    function fancyFunction()
    public 
    {
        fancyStruct = FancyStruct({
            from: address(0x01),
            to: address(0x02)
        });
        fancyStruct.balances[address(0x01)] = 10;
        fancyStruct.balances[address(0x02)] = 20;
    }
}

Sie verwenden die auf geschweiften Klammern basierende Methode, um die Struktur zu initialisieren, lassen die Zuordnung in der Deklaration weg und interagieren dann mit der darin enthaltenen Zuordnung, wie Sie es normalerweise mit einer Speichervariablen tun würden.

Was ist, wenn Sie den folgenden Fehler erhalten? TypeError: Member "balances" ist in struct FancyStruct nicht verfügbar. Lautsprecherspeicher außerhalb des Speichers.
Nicht sicher. Vielleicht möchten Sie eine Frage dazu öffnen und über Memory vs Storage lesen .
Ich habe gerade festgestellt, dass Ihre fancyStruct eine Zustandsvariable ist. Ich versuche, eine Struktur innerhalb der Funktion zu initialisieren, ohne eine Zustandsvariable zu verwenden.