是否可以使用如下所示的塊初始化對象?使用塊初始化對象
class Foo
attr_reader :bar,:baz
def initialize(bar,baz)
@bar, @baz = bar, baz
end
end
Foo.new do |bar, baz|
# some logic to be implemented
# @bar, @baz to be assigned
end
是否可以使用如下所示的塊初始化對象?使用塊初始化對象
class Foo
attr_reader :bar,:baz
def initialize(bar,baz)
@bar, @baz = bar, baz
end
end
Foo.new do |bar, baz|
# some logic to be implemented
# @bar, @baz to be assigned
end
當然,你可以yield
從initialize
內,沒有什麼特別的地方:
class Foo
attr_accessor :bar, :baz
def initialize
yield self
end
end
Foo.new do |f|
f.bar = 123
f.baz = 456
end
#=> <Foo:0x007fed8287b3c0 @bar=123, @baz=456>
你也可以使用instance_eval
評估接收器的情況下塊:
class Foo
attr_accessor :bar, :baz
def initialize(&block)
instance_eval(&block)
end
end
Foo.new do
@bar = 123
@baz = 456
end
#=> #<Foo:0x007fdd0b1ef4c0 @bar=123, @baz=456>
如果我想要一個對象可以通過兩種方式實例化:使用塊和構造函數? – DreamWalker
@DreamWalker你可以使參數爲可選的,並且只有在['block_given?'](http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-block_given-3F)時纔會產生。 – Stefan
當然,但不要忘記提供參數。該塊不會做任何事情。 – sawa