收益率和收益率之间的差异?

viv*_*mar 11 ruby yield self

谁能帮助我理解"收益自我"和"收益率"之间的区别?

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
Run Code Online (Sandbox Code Playgroud)

num*_*407 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
Run Code Online (Sandbox Code Playgroud)

  • `self`是对实例的引用,但就像我说的,这里没什么特别的.基本上将yield视为一种方法,它接受任何参数并将它们传递给块.请参阅编辑多个参数. (2认同)

Vic*_*gin 5

yield self进入块,与方法调用相关联,将当前对象作为参数传递给块,普通yield只是进入块而不传递任何参数。