In Ruby, following are the two ways in which we can pass a block to a method:
As an argument
As an anonymous block
Passing an argument is always considered better then anonymous block for various reasons:
It increases readability of the method.
If we pass block as an argument, then we get &block as Proc object.
And in comparision to object, we can not do much with anonymous block.
Let’s define a method that calls a Proc.
If we call this method without a block,
then we’ll get ArgumentError.
We’ll also get ArgumentError if we use lambda instead of proc.
To handle this error, we need to explicitly add block_given? condition.
Because method doesn’t tell us to pass anonymous block.
That is why, Ruby 2.7 has added
warning for Proc.new and proc without block in a method called with a block and errors
for lambda without block in a method called with a block.
Before
We do not get any warning when Proc.new and proc is used
without block in a method in earlier versions.
We get a warning when lambda is used without block in a method.
Ruby 2.7
With Ruby 2.7, We will get a warning for Proc.new and proc
without block in a method called with a block.
It will give error for lambda without block in a method called with a block.