有人可以帮助我理解“收益自我”和“收益率”之间的区别吗?
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
答案 0 :(得分:20)
在yield self
的情况下,self
是传递给块的参数。简单地使用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
答案 1 :(得分:4)
yield self
进入块,与方法调用相关联,将当前对象作为参数传递给块,plain yield
只是进入块而不传递任何参数。
答案 2 :(得分:1)
将yield
视为调用您的块,yield self
以当前实例作为参数调用您的块。