Ruby Ruby Blocks Blocks Practice Build a Monster Class: Part 4

Shoko Ishigaki
Shoko Ishigaki
21,734 Points

yield and block.call

I watched all the videos in this course and checked relevant questions, but I'm still not sure the difference between use of yield and block.call

yield self if block_given?
block.call(self)

Can someone help me understand the difference between these codes? Thanks in advance!

1 Answer

Jay McGavren
STAFF
Jay McGavren
Treehouse Teacher

There basically is no difference, except that yield implicitly calls the block without you having to store it in a variable first. So these are mostly equivalent:

def implicit_block
  puts yield
end

def explicit_block(&block)
  puts block.call
end

implicit_block { 3 } # Prints "3"
explicit_block { 4 } # Prints "4"

But, to me, the implicit_block style seems a little more convenient in this case.