Использование драгоценного камня Ruby BinData для чтения вариантов

Я реализую структуру данных, используя 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 в приведенном выше коде?


person Indika K    schedule 11.06.2011    source источник
comment
Я не уверен, что этот вопрос имеет смысл. Для чего именно вам нужна опция по умолчанию?   -  person Mark Thomas    schedule 11.06.2011
comment
Прошу прощения за двусмысленность вопроса. Отредактировал и добавил еще несколько примеров кода, чтобы уточнить его.   -  person Indika K    schedule 12.06.2011
comment
Хорошо, я вижу, что ты пытаешься сделать. Ваш собственный ответ ниже выглядит как хорошее решение. Иди и прими это.   -  person Mark Thomas    schedule 12.06.2011


Ответы (3)


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
person Dion Mendel    schedule 20.06.2011

Ну, я нашел работу вокруг. В любом случае любой другой вариант также приветствуется.

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
person Indika K    schedule 12.06.2011

вы могли бы установить значение по умолчанию в конструкторе, возможно...

person rogerdpack    schedule 14.06.2011