I’m reading through Mauricio’s list of changes[0] to Ruby 1.9 and
having trouble with understanding the point of Proc#yield
Invokes the block, setting the block’s parameters to the values in
params in the same manner the yield statement does.
a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
a_proc.yield([9, 1, 2, 3]) #=> [9, 18, 27]
a_proc = Proc.new {|a,b| a}
a_proc.yield(1,2,3) # => [1]
It seems like this is the same as Proc#[] or Proc#call
VERSION
=> “1.8.4”a_proc = Proc.new {|a, b| b.collect {|i| ia }}
=> #Proc:[email protected]:8(irb)a_proc[9,1,2,3]
=> [9, 18, 27]a_proc[[9,1,2,3]]
=> [9, 18, 27]a_proc = Proc.new { |a,b| a }
=> #Proc:[email protected]:11(irb)a_proc[1,2,3]
=> 1
Mauricio says “Proc#yield was added (also NilClass#yield which raises
a LocalJumpError so you can use it on &block).”
The best ‘feature’ I can think of is that this lets you do
def something(&block)
block.yield(1,2,3)
rescue LocalJumpError
puts “was expected a block”
end
But I’m not sure I’m convinced of how cool that is. Am I missing
something?