Utilizzando Rubino BinData gemma per leggere le scelte
-
26-10-2019 - |
Domanda
I sono l'attuazione di una struttura di dati utilizzando Ruby e il BinData gioiello. Ho bisogno di attuare un valore Choice
. Secondo la documentazione BinData, una scelta può essere implementata come:
class MyData < BinData::Record
uint8 :type
choice :data, :selection => :type do
type key #option 1
type key #option 2
end
end
Ho bisogno di avere un opzione di default nella scelta:
class MyRecord < BinData::Record
uint8 :type
choice :mydata, :selection => :type do
uint32 0
uint16 1
end
end
Come può essere gestito se type
non è 0
o 1
nel codice qui sopra?
Soluzione 2
Beh ho trovato un lavoro intorno. In ogni caso qualsiasi altra opzione è anche il benvenuto.
class MyRecord < BinData::Record
uint8 :data_type
choice :mydata, :selection => :get_choice do
uint32 1
uint16 2
string 255, :read_length => 4
end
def get_choice
choices = [1, 2]
if choices.include? data_type
return data_type
else
return 255
end
end
end
Altri suggerimenti
BinData 1.4.1 gestisce questo modo nativo con :default
class MyRecord < BinData::Record
uint8 :data_type
choice :mydata, :selection => :data_type do
uint32 1
uint16 2
string :default, :read_length => 4
end
end
si potrebbe impostare un default in un costruttore, forse ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow