Solidity
用於返回資料結構的 Solidity 函式
當嘗試像這樣返回具有 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.
這是我希望函式返回的結構:
struct asst { uint256 assetId; uint256 next; uint256 prev; uint256 timestampCreation; address assetOwner; address issuer; string content; uint256 sellPrice; assetState state; }
知道如何在 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; } }
希望能幫助到你。