Проверка BinData::Record при инициализации

Есть ли способ проверить поля, установленные в BinData::Record во время инициализации? Check_value для каждого параметра оценивается только после чтения из входного потока.

class Foo < BinData::Record
   uint8 :bar,:check_value=>lambda{raise 'Here is an error'}
end

Foo.new(:bar=>5)  #Does not raise validation exception

Я попытался добавить «initialize_instance», где он читает «to_binary_s», но выдает некоторые другие ошибки, предположительно потому, что объект не полностью создан.


person FooManChew    schedule 01.06.2012    source источник


Ответы (1)


Напишите метод def initialize. Затем поместите проверку внутри него. Инициализация запускается при создании экземпляра объекта, поэтому проверка должна выполняться.

person MurifoX    schedule 01.06.2012
comment
Извините, это не так просто. Библиотека проверяет, был ли написан метод инициализации, и выполняет другие действия. - person FooManChew; 04.06.2012
comment
вы не можете переопределить инициализацию с помощью записей Bindata, вместо этого они рекомендуют создать метод initialize_instance. - person amenthes; 09.12.2014