Solidity

用於返回資料結構的 Solidity 函式

  • February 12, 2018

當嘗試像這樣返回具有 Solidity 的結構時:

function getAssetStructById(uint256 assetId) constant returns (asst _asset) {
   return (assetsById[assetId]);
}

這是它拋出的編譯錯誤:

Error: Internal type is not allowed for public or external functions.

那麼,我怎樣才能得到返回的結構的數據呢?我嘗試返回結構的每個欄位,但是一旦達到 9 個數據欄位,這將不再起作用,出現錯誤:

'Stack too deep' compiler error.

參考:Solidity 函式的返回值數量是否有限制?

這是我希望函式返回的結構:

struct asst {
   uint256 assetId;
   uint256 next;
   uint256 prev;
   uint256 timestampCreation;
   address assetOwner;
   address issuer;
   string content;
   uint256 sellPrice;
   assetState state;
}

知道如何在 Solidity 上做到這一點嗎?謝謝!

參考:從 Solidity 合約中返回一個結構體

更新:

看這裡。我們可以返回結構,但僅限於內部呼叫。

在 Solidity 的新版本中返回結構

在此程式碼段中,function tryIt()成功編譯後返回 true。它只是進行內部呼叫(成功)。getAssetStructById()從外部呼叫時失敗。

pragma solidity 0.4.17;

contract Test {

   enum assetState{something}

   mapping(uint256 => asst) assetsById;

   struct asst {
       uint256 assetId;
       uint256 next;
       uint256 prev;
       uint256 timestampCreation;
       address assetOwner;
       address issuer;
       string content;
       uint256 sellPrice;
       assetState state;
   }

   function getAssetStructById(uint256 assetId) public view returns (asst _asset) {
       return (assetsById[assetId]);
   }

   function tryIt(uint id) public view returns(bool success) {
       asst memory a = getAssetStructById(id); 
       return true;
   }
}

希望能幫助到你。

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