ruby - yield self 和 yield 的区别?

标签 ruby yield self

谁能帮我理解“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/

相关文章:

ruby-on-rails - 字符串:用 * 号屏蔽最后 n 个字符

ruby-on-rails - 使用 button_to 更新多个值 - Rails 4

c# - python中的yield == C#中的yield return?

ruby-on-rails - 在不使用自身的情况下从模型设置属性不起作用

go - 在 Go 中命名接收器变量 'self' 是误导还是好的做法?

ruby - 将查询字符串添加到机架重写响应

ruby - 使用 !在 ruby

python - 这个 python 语法是什么意思?

PHP Yield,奇怪的行为

python - 将 self 参数命名为其他名称