Struct

我可以在不提供成員結構的情況下用成員結構實例化結構嗎?

  • November 24, 2018

我有一個包含另一個結構的結構。實例化包含結構時,成員結構還不存在。結構是否有預設值(對於地址、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)

根據我的經驗,當您遇到此類問題時,這意味著您的設計可以比這更好。盡量避免在儲存設計中映射您對數據的思考,列出數據而不對它們進行分群,並嘗試找到更簡單的東西。有時這不起作用,但通常它有很大幫助。

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