谁能帮我理解“yield self”和“yield”的区别?
class YieldFirstLast
attr_accessor :first, :last
def initialize(first = nil, last = nil)
@first = first
@last = last
yield self if block_given?
end
def hello
puts "#{@first} #{@last} says hello!"
end
end
最佳答案
在 yield self
的情况下,self
是传递给 block 的参数。使用简单的 yield
,不传递任何参数。 self
在这里并不特殊,任何东西都可以产生,例如
class Foo
def a() yield self end
def b() yield end
def c() yield "Bar" end
def d() yield 1, 2, "scuba" end
def to_s() "A!" end
end
Foo.new.a {|x| puts x } #=> A!
Foo.new.b {|x| puts x } #=> (a blank line, nil was yielded)
Foo.new.c {|x| puts x } #=> Bar
Foo.new.d {|x, y, z| puts z } #=> scuba
关于ruby - yield self 和 yield 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12032291/