Struct
我可以在不提供成員結構的情況下用成員結構實例化結構嗎?
我有一個包含另一個結構的結構。實例化包含結構時,成員結構還不存在。結構是否有預設值(對於地址、int 等,我將使用預設值 (0) 進行初始化)?如果可能的話,我想避免將成員結構中的每個基本類型都設置為預設值以節省氣體。
struct MemberItem { uint value1; ... uint value10; } struct Item { MemberItem memberItem; uint itemId; } item = Item({memberItem:0}, itemId:0);
或者,我必須執行以下操作嗎?
item = Item({memberItem:MemberItem({value1:0,...,value10:0}, itemId:0);
或者,我必須執行以下操作嗎?
item = Item({memberItem:MemberItem({value1:0,...,value10:0}, itemId:0);
是的,在設計中,您應該始終初始化所有欄位
你也可以重新設計你的契約。您需要劃分這些結構並通過映射連結它們
struct MemberItem { uint value1; ... uint value10; } struct Item { uint itemId; } mapping(uint => MemberItem) itemToMember;
在映射
uint
中是itemId
(唯一的項目 id)
根據我的經驗,當您遇到此類問題時,這意味著您的設計可以比這更好。盡量避免在儲存設計中映射您對數據的思考,列出數據而不對它們進行分群,並嘗試找到更簡單的東西。有時這不起作用,但通常它有很大幫助。