我无法弄清楚正确的块初始化
class Foo
attr_accessor :bar
end
obj = Foo.new do |a|
a.bar = "baz"
end
puts obj.bar
期待“巴兹” 而不是
ruby中块类初始值设定项的正确含义是什么?
答案 0 :(得分:29)
制作块初始化程序的另一种方法是自己编写一个:
class Foo
attr_accessor :bar
def initialize
yield self if block_given?
end
end
后来使用它:
foo = Foo.new do |f|
f.bar = true
end
我的两分钱。
答案 1 :(得分:9)
再试一次:
class Foo
attr_accessor :bar
end
obj = Foo.new.tap do |a|
a.bar = "baz"
end
puts obj.bar
答案 2 :(得分:2)
我认为无论如何都从未在任何地方看到它。为什么要在块中初始化?您总是可以new
不能阻止它。obj = foo.new.tap do |a| ...
如果您真的想要一个块
答案 3 :(得分:0)
实际上你有一个构造函数用于这些目的:
class Foo
attr_accessor :bar
def initialize(bar = "baz")
@bar = bar
end
end