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?

È stato utile?

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
scroll top