Difference between yield self and yield?

ruby, self, yield

Solution

In the case of `yield self`, `self` is the argument passed to the block. With simply `yield`, no argument is passed. `self` is not special here, anything could be yielded, e.g.

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

Problem

Could anyone please help me to understand the difference between "yield self" and "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 ```

Original source