Actions
Bug #12809
closedpassing a proc to Kernel#lambda does not create a lambda
Description
I would expect the following:
p = proc { |a| a * 2 }
l = lambda(&p)
puts l.lambda? # => true
l.call(1, 2) # => ArgumentError
But it does not, basically l
there looks very much like a non-lambda proc (another test is that a return in p
would cause l.call
to raise LocalJumpError)
Updated by shyouhei (Shyouhei Urabe) over 7 years ago
- Status changed from Open to Assigned
- Assignee set to akr (Akira Tanaka)
Updated by akr (Akira Tanaka) over 7 years ago
- Status changed from Assigned to Rejected
Current behavior is intentional design.
If "lambda" change the lambda-ness of the given block,
the author of "proc { |a| a * 2 }" can not know how the block is interpreted.
This is what the design try to avoid.
Rather, it may be possible to raise error on "lambda" with non-lambda proc object.
This is different issue, though.
Actions
Like0
Like0Like0