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

StackOverflow https://stackoverflow.com/questions/6314915

Вопрос

Я внедряю структуру данных с помощью 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

Вы можете установить дефолт в конструкторе, возможно, ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top