Uso de la gema de ruby bindata para leer opciones
-
26-10-2019 - |
Pregunta
Estoy implementando una estructura de datos usando Ruby y el Bindata joya. Necesito implementar un Choice
valor. Según la documentación de Bindata, se puede implementar una opción como:
class MyData < BinData::Record
uint8 :type
choice :data, :selection => :type do
type key #option 1
type key #option 2
end
end
Necesito tener una opción predeterminada en la elección:
class MyRecord < BinData::Record
uint8 :type
choice :mydata, :selection => :type do
uint32 0
uint16 1
end
end
¿Cómo se puede manejar eso si type
no es 0
o 1
en el código anterior?
Solución 2
Bueno, encontré un trabajo. De todos modos, cualquier otra opción también es muy bienvenida.
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
Otros consejos
Bindata 1.4.1 maneja esto de forma nativa 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
podría establecer un valor predeterminado en un constructor tal vez ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow