Вкратце: super
всегда получает блок, заданный при вызове метода потомка, даже если явно указаны аргументы без него. На примере:
class Alpha def initialize name, &block @name = name if block_given? self.instance_eval &block end end end class Beta < Alpha def initialize name, family, &block super(name) @family = family if block_given? self.instance_eval &block end end end b = Beta.new 'John', 'Bull' do p self end
Выдаст примерно следующее:
#<Beta:0x00000001733560 @name="John"> #<Beta:0x00000001733560 @name="John", @family="Bull">
Т.е. сначала блок отрабатывает в super
, а затем в непосредственном методе... И что-то мне это не нравится.
upd: Да, явное указание пустого блока помогает:
super(name) do end
Комментариев нет:
Отправить комментарий