Zurückgeben des Arrays von Struct in Remix

Scheint, als gäbe es viele verwandte Fragen, z. B. hier , aber ich kann immer noch nicht glauben, dass es im Remix nicht unterstützt wird, oder verstehe ich es falsch? scheint, wie es in der Produktion unterstützt wird.

struct Test {
    address receiver;
    string date;
} 

mapping(address => Test[]) public testInfo;

function getTestInfo(address _account) public constant returns (Test[]) {
    return testInfo[_account];
}

Gibt es trotzdem diesen Code auszuführen und ein Array von zurückzugeben Test?

Antworten (1)

Es wird ausgeführt, aber die Ausgabe wird nicht dekodiert. Sie sehen diese Meldung in der Konsole:

failed to decode output: Error: Unsupported or invalid type: tuple

Ich wollte vorschlagen, zwei Arrays zu destrukturieren und zurückzugeben, aber es gibt eine Zeichenfolge in der Struktur, die ebenfalls nicht zurückgegeben werden kann, da die Zeichenfolge selbst ein Array ist. Sie haben es so benannt, dass es vielleicht auf einem Feld oder vielleicht auf einem Feld dategehalten werden kann ? Wenn dies der Fall ist, können Sie Folgendes tun:uintbytes32

function getTestInfo(address _account) public constant returns (address[], bytes32[]) {

Das heißt, geben Sie Struct-Felder in separaten Arrays zurück und strukturieren Sie sie in Ihrem Frontend um.

ok, so scheint es, als könnte es in der Produktionsumgebung dekodiert werden? und nicht so sicher, was Sie mit Rückgabestrukturfeldern in separaten Arrays gemeint haben. Die Größe ist dynamisch.
Was meinen Sie mit „Produktionsumgebung“? Was ich mit Zerstörung meine, ist angenommen, Sie möchten 10 Tests zurückgeben. Sie geben 10 addresses und 10 bytes32s zurück, nennen wir sie receiversund dates. Jedes Element in diesen Arrays wird auf die entsprechenden Felder des Testursprünglichen Arrays gesetzt, z. B. receivers[0] == Tests[0].receiverund dates[0] == Tests[0].date. Aus dieser Struktur können Sie Testsim Frontend ein Array aufbauen.
Danke. Ich habe es gerade mit deiner Methode versucht und es hat funktioniert. Aber ich habe bytes32 für Daten verwendet, z. B.: 2018-01-31und was zurückgegeben wird, ist die Adresse. 0x323031382d30312d323800000000000000000000000000000000000000000000Was kann behoben werden?
Das ist keine Adresse, es ist die Hex-Darstellung der Zeichenfolge „2018-01-31“, Sie können nach Wegen suchen, sie umzuwandeln. Wenn die Formatierung nicht beibehalten werden muss, schlage ich vor, dass Sie uints für Datumsangaben verwenden.
Vielen Dank. Hoffentlich muss ich in Zukunft nicht noch ein paar Schritte durchlaufen.