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 ```