Vorwort
Im Zeitalter von Solidity 0.4 wird die Rückgabe von Strukturen nicht unterstützt. Aber jetzt ist solidity in Version 0.8 eingetreten, diese Version unterstützt die direkte Rückgabe von Struct und Struct Array, das Folgende ist die spezifische Methode.
Codebeispiel
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract ContractFactory {
struct User {
uint256 id;
uint256 age;
string name;
}
mapping(uint256 => User) public users;
mapping(uint256 => User[]) public userGroup;
function init() public {
User memory newUser1 = User({
id: 1,
age: 24,
name: "lily"
});
User memory newUser2 = User({
id: 2,
age: 25,
name: "brain"
});
userGroup[1].push(newUser1);
userGroup[1].push(newUser2);
User storage newUser = users[1];
newUser.age = 16;
newUser.name = "amber";
userGroup[1].push(newUser);
}
function getStruct() public view returns (User memory) {
User memory user = users[1];
return user;
}
function getStructArray() public view returns (User[] memory) {
User[] memory group = userGroup[1];
return group;
}
function getStructArrayLength() public view returns(uint256) {
return userGroup[1].length;
}
}
Ergebnis des Web3-Aufrufs
getStruct() :: [ '0', '16', 'amber', id: '0', age: '16', name: 'amber' ]
getStructArray() :: [
[ '1', '24', 'lily', id: '1', age: '24', name: 'lily' ],
[ '2', '25', 'brain', id: '2', age: '25', name: 'brain' ],
[ '0', '16', 'amber', id: '0', age: '16', name: 'amber' ]
]
Wir sehen, dass es in digitaler Form dargestellt wird, wobei der Strukturwert als Wert + Schlüsselwert-Paar dargestellt wird.