Contract-Development

翻譯這個結構的最好方法是什麼?

  • February 5, 2020

假設我必須有這個資料結構:

├── Operations (struct)
│   ├── date_begining (uint)
│   └── date_end (uint)
│   └── responsible (address)
│   └── type **(?)**
│          ├── Observation (struct)
│          |     └── Production units (string)
│          |     └── Parcel (string)
|          OR
│          ├── ObservationPrague (struct)
│          |     └── Fon state (bool)
│          |     └── Trapped (string)
|          OR
│          ├── ObservationDesiese (struct)
│          |     └── Other var (bool)
│          |     └── Some Other var (uint)
|          OR
│          ├── Logistics (struct)
│          |     └── Other var1 (bool)
│          |     └── Some Other var1 (uint)

所以如您所見,我需要一個始終有 4 個鍵的操作結構 :date_beginingdate_end和. 直到現在還可以。但是現在,我的類型應該有以下 4 個選擇之一:、或,因此也有自己的鍵/值。那麼,對我來說,建構我的“類型”的最佳方式是什麼。有沒有辦法在solidity lang中說“它是這四個結構之一”?我想到了列舉,但得出的結論是不可能的,因為那樣我就無法在列舉下擁有鍵/值對。感謝任何幫助。responsible``type``Observation``ObservationPrague``ObservationDesiese``Logistics

你不能有一個可選的結構佈局。

您可以使用相關結構完成類似的操作。

└── Operations (struct)
   ├── date_begining (uint)
   └── date_end (uint)
   └── responsible (address)
   └── typeID (bytes32)
   └── typeSchema (refer to the class that applies)

定義四種類型:

└── Observation (struct)
   └── Production units (string)
   └── Parcel (string)

└── ObservationPrague (struct)
    └── Fon state (bool)
    └── Trapped (string)

您將需要一種方法來組織這四種類型的實例。可能過於簡化:

mapping(bytes32 => Observation) observations;
mapping(bytes32 => ObservationPrague) observationPragues;
...

這裡需要注意的是,這似乎有點忙,如果可能的話,我會尋找簡化鏈上設計的方法來避免這種情況。

希望能幫助到你。

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