How to Convert a Ruby Block to Proc?

When passing a Ruby block to a method as an argument, you can use the unary ampersand operator (&) to convert the block to a Proc object, for example, like so:

def method_with_block(&block)
  puts block.class #=> "Proc"
  block.call #=> "Hello World!"
end

# calling the method with a block
method_with_block { puts "Hello World!" }

Apart from using the & operator in the method parameter list, you can also use various methods that are used for creating a Proc (such as Proc.new, Kernel#lambda, etc.), to explicitly create a Proc object from a block:

# using `Proc.new` to create `Proc` from block
my_proc = Proc.new { puts "Hello World!" }

my_proc.call #=> "Hello World!"
puts my_proc.class #=> "Proc"
# using `Kernel#lambda` method to create `Proc` from block
my_proc = lambda { puts "Hello World!" }

my_proc.call #=> "Hello World!"
puts my_proc.class #=> "Proc"

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.