Solidity
如何處理動態大小的字元串數組?
我有一個店主,一個店主可以有多個產品。我想將產品 ID 保存在一個數組中。
此外,公共方法可以返回店主的所有產品 id 列表。
我嘗試了以下程式碼
pragma solidity 0.5.0; contract Shop { struct ShopOwner { string id; string[] productList; } struct Product { string id; string name; } mapping(string => ShopOwner) private mapShopOwner; function getUserProductList(string _shopOwnerId) public view returns(string[]) { return (mapShopOwner[_shopOwnerId].productList); } }
這似乎不支持solidity語言。
我收到錯誤
browser/Structure.sol:17:33:TypeError:函式中參數的數據位置必須是“記憶體”,但沒有給出。function getUserProductList(string _userId) 公共視圖返回(string
$$ $$) { ^————^
和
browser/Structure.sol:17:69: TypeError: 函式中返回參數的數據位置必須是“記憶體”,但沒有給出。function getUserProductList(string _userId) 公共視圖返回(string
$$ $$) { ^——^
而且我不想使用
pragma experimental ABIEncoderV2;
我想知道,處理這種關係的正確程序是什麼。
Solidity 在目前版本中無法返回字元串數組。一種解決方法是序列化字元串數組,然後在客戶端對其進行反序列化。
一個例子 :
https://hackernoon.com/serializing-string-arrays-in-solidity-db4b6037e520
編譯器抱怨返回類型中缺少數據位置說明符,應該是
returns (string [] memory)
. 此外,作為一個整體返回字元串數組可能是個壞主意,因為可能存在只需要數組長度或只需要某些元素的案例。常見的模式是有兩種方法:一種返回數組長度,另一種按索引返回數組元素。