Remix

結構內映射的獲取器

  • August 25, 2020

我想創建一個 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

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