Solidity

呼叫函式時如何返回結構?

  • December 8, 2021

我想返回 struct type User。但是,當我嘗試以下getUser函式時,它返回錯誤。有什麼方法可以從函式返回結構數據?

契約

struct User{
   uint256 user_id;
   bytes32 name;
   bytes32 address;
   bytes32 birth_day;
}
mapping (uint256 => User) public users;

function getUser(uint256 user_id) constant returns (User) {
       return users[user_id];
}

錯誤

client/lib/contracts/User.sol:Solidity 錯誤::125:58:錯誤:預期類型名稱

函式 getUser(uint256 user_id)常量返回(struct User){

您不能返回 astruct因為 Solidity 僅將它們實現為一個鬆散的變數包,它們不是真實的對象。

您可以使用此答案中的解決方案:https ://ethereum.stackexchange.com/a/3614/264

更新

因為0.4.17您可以使用pragma experimental ABIEncoderV2返回結構。當然,在experimental刪除關鍵字之前,在生產應用程序中使用它是不安全的。

傳遞結構在 0.4.17 中可用,帶有pragma experimental ABIEncoderV2。見https://github.com/ethereum/solidity/issues/40

引用自:https://ethereum.stackexchange.com/questions/7317