Remix
結構內映射的獲取器
我想創建一個 getter 函式來訪問嵌套在結構中的映射。但是我製作的功能要求我使用過期版本(我在 Remix 上)。
所以我使用了過期版本來驗證我所做的程式碼是否正確。這裡是我盡可能簡化的使用程式碼:
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; contract SupChain{ enum StateType {Created, InTransit, Stored, OutOfComplicance, Completed} struct Status{ StateType state; address currentCounterparty; string test; } struct Order{ uint256 orderID; uint256 NumberOfUpdate; string test; mapping (uint256 => Status) statutes; } mapping (uint256 => Order) public orders; function getStatus(uint256 id, uint256 concernedStatusNumber) public returns (Status memory status){ Order storage concernedOrder = orders[id]; Status memory concernedStatus = concernedOrder.statutes[concernedStatusNumber]; return concernedStatus; }
現在我希望能夠在不使用過期版本的情況下訪問地圖。我如何編寫這樣的吸氣劑版本?
來自上一個 Solidity 文件: https ://solidity.readthedocs.io/en/v0.7.0/contracts.html#return-variables
在 NOTE 段落中 RETURN-VARIABLES 部分的末尾:“您不能從非內部函式返回某些類型,尤其是多維動態數組和結構。如果您通過添加 pragma experimental ABIEncoderV2; 來啟用新的 ABIEncoderV2 功能;文件然後有更多類型可用,但映射類型仍僅限於單個合約內,您無法轉移它們。”
因此,您可以返回結構,但僅限於內部呼叫。另請參閱: solidity-function-to-return-a-data-struct