Arrays
將結構數組作為參數傳遞:僅允許庫在公共或外部函式中使用映射類型
我正在嘗試將多個項目推送到契約中的結構數組中。如果可以將結構數組作為參數傳遞,則找不到明確的答案。
顯然我不能,但我從編譯器那裡得到了另一種錯誤。它認為我正在傳遞一個映射:
Only libraries are allowed to use the mapping type in public or external functions.
這是程式碼
mapping (address => Review[]) reviewsMap; mapping (address => uint24) reviewCounts; function addMultipleReviews(Review[] memory array) public { address author = msg.sender; for (uint i=0; i < array.length; i++) { reviewsMap[author].push(array[i]); } reviewCounts[author] = reviewCounts[author] + array.length; }
這是不允許的嗎?如果是這樣,添加多個評論的替代方法是什麼?
您不允許傳遞結構(或您的情況下的結構數組)。
而不是傳遞一個
Review
元素數組,而是傳遞幾個數組 - 這個結構中的每個欄位一個。
Review
然後在將其推送到 之前構造一個實例reviewsMap[author]
。我建議斷言數組的長度是相同的。