Я не могу понять, правильно инициализировать блок
class Foo attr_accessor :bar end obj = Foo.new do |a| a.bar = "baz" end puts obj.bar
Ожидайте "Баз" вместо этого получите ноль
Какое правильное заклинание для инициализаторов класса блока в ruby?
Еще один способ сделать инициализатор блока - написать его самостоятельно:
class Foo attr_accessor :bar def initialize yield self if block_given? end end
И позже использовать его:
foo = Foo.new do |f| f.bar = true end
Мои два цента.
Попробуйте еще раз:
class Foo attr_accessor :bar end obj = Foo.new.tap do |a| a.bar = "baz" end puts obj.bar
Я не думаю, что new может взять блок. Никогда его нигде не видел. Почему вы хотите инициализировать в блоке? Вы всегда можете сделать obj = foo.new.tap do |a| ... Если вы действительно хотите блок
new
obj = foo.new.tap do |a| ...
на самом деле у вас есть конструктор для этих целей:
class Foo attr_accessor :bar def initialize(bar = "baz") @bar = bar end end