Ich versuche nur, eine Bestätigung zu erhalten, ob dies derzeit in Solidity unterstützt wird. Ältere Antworten auf diese Frage scheinen zu implizieren, dass dies hinzugefügt wurde, aber ich kann keine konkrete Literatur zur Bestätigung finden.
Wenn ich eine Struktur im Vertrag habe, kann ich sie über einen Getter im Vertrag zurückgeben? Zum Beispiel:
struct myDetails {
string firstName;
string lastName;
}
function getName() returns (???) {
return myName;
}
Danke
Martin
Es ist derzeit nicht möglich, eine Struktur mit einer eigenen Funktion nach außen zurückzugeben . Nichtsdestotrotz ist es mit den automatisch generierten Gettern von Solidity möglich.
Durch Markieren einer Variablen public
(zB uint public someNumber
) generiert Solidity automatisch einen Getter ( someContract.someNumber()
). Dies funktioniert tatsächlich mit Strukturen ( Foo public someFoo
) und sogar mit Arrays und Mappings! ( mapping(uint => player) public players
) Im letzten Fall geben Sie dem Getter einen Schlüssel, um den gewünschten zu erhalten. ( someContract.players(7)
)
Eine Einschränkung: Verschachtelte Strukturen, Arrays und Zuordnungen innerhalb von Strukturen werden derzeit nicht von Gettern zurückgegeben. Saiten sind es jedoch.
In den offiziellen Repos gibt es keinen Hinweis darauf, eine Rückgabe des Struct-Typs zuzulassen. siehe https://github.com/ethereum/solidity/releases
Ich schlage vor, dass Sie für Ihre getName-Funktion mehrere Rückgaben verwenden.
function getName() returns (string,string) {
string firstName;
string lastName;
return (firstName, lastName);
}
Ajoy Bhatia
mapping(uint => player) public players
Werttypplayer
ein benutzerdefinierter, dh nicht primitiver Typ zu sein. Ich nehme also an, es wäre eine Struktur oder ein Mapping. Wenn alsosomeContract.players(7)
a zurückgegebenplayer
wird, bedeutet das, dass Strukturen innerhalb von Zuordnungen zurückgegeben werden können, obwohl Zuordnungen innerhalb von Strukturen dies nicht können (was Sie später in der Einschränkung erwähnen)?Matthäus Schmidt
Roy