Использование драгоценного камня Ruby Bindata для чтения вариантов
-
26-10-2019 - |
Вопрос
Я внедряю структуру данных с помощью Ruby и Bindata жемчужина Мне нужно внедрить Choice
ценность. Согласно документации Bindata, выбор может быть реализован как:
class MyData < BinData::Record
uint8 :type
choice :data, :selection => :type do
type key #option 1
type key #option 2
end
end
Мне нужно иметь опцию по умолчанию в выборе:
class MyRecord < BinData::Record
uint8 :type
choice :mydata, :selection => :type do
uint32 0
uint16 1
end
end
Как это можно обработать, если type
не является 0
или же 1
в приведенном выше коде?
Решение 2
Ну, я нашел работу. В любом случае, любой другой вариант также приветствуются.
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
Другие советы
Bindata 1.4.1 обрабатывает это изначально с :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
Вы можете установить дефолт в конструкторе, возможно, ...
Не связан с StackOverflow