Ruby - lambda vs. Proc.new
Solution 1
This is one of the main differences between Procs and lambdas.
A return in a Proc returns from its enclosing block/method, while a return in a lambda simply returns from the lambda. When you call the lambda inside the func_two, it simply returns its value in place, which is not saved.
Read on Procs v. lambdas here: http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls
See duplicate SO question: Why does explicit return make a difference in a Proc?
EDIT:
To further illustrate this difference, swap func_one and func_two for blocks and see what happens:
> begin; lambda { return 1 }.call end
1
> begin; Proc.new { return 1 }.call end
LocalJumpError: unexpected return
...
Solution 2
In the proc, the return "123"
is bubbling up and returning from the outer function, func_one
. Therefore the second return statement is never encountered.
In the lambda, the return "123"
is returning only from the lambda. You're not setting an variable to the return value of the lambda (when you do lambda_new.call
, so the value is basically just thrown out. Then, the return "456"
is called and returns from the function. If, instead of returning "456"
, you returned lambda_new.call
, the return value of func_two
would be "123"
.
Related videos on Youtube
Simplicity
Updated on October 06, 2020Comments
-
Simplicity over 3 years
Possible Duplicate:
What's the difference between a proc and a lambda in Ruby?When run this
Ruby
code:def func_one proc_new = Proc.new {return "123"} proc_new.call return "456" end def func_two lambda_new = lambda {return "123"} lambda_new.call return "456" end puts "The result of running func_one is " + func_one puts "" puts "The result of running func_two is " + func_two
The result that I get is as follows:
The result of running func_one is 123 The result of running func_two is 456
As for
func_two
, where is the the value of the firstreturn
, that is,123
?Thanks.
-
lacostenycoder about 6 yearsWhat do you mean "it is not used"? Your answer is not very clear.