Actions
Feature #17361
closedlambda(&block) does not warn with lazy proc allocation
Description
In NEWS,
* Kernel#lambda now warns if called without a literal block.
[[Feature #15973]]
But the following code from https://docs.ruby-lang.org/ja/latest/method/Kernel/m/lambda.html (https://github.com/rurema/doctree/blob/495868c466c97c9bcca28d64d6ce0d68350de3e2/refm/api/src/_builtin/functions#L2436-L2441) does not warn.
def foo &block
lambda(&block)
end
it = foo{p 12}
it.call #=> 12
Once block assign to a local variable, it warns.
def foo &block
b = block
lambda(&b)
end
it = foo{p 12}
it.call #=> 12
Updated by znz (Kazuhiro NISHIYAMA) almost 4 years ago
- Related to Feature #15973: Let Kernel#lambda always return a lambda added
Updated by ko1 (Koichi Sasada) almost 4 years ago
- Assignee set to ko1 (Koichi Sasada)
Updated by ko1 (Koichi Sasada) almost 4 years ago
- Status changed from Open to Closed
Applied in changeset git|b53ccb9c69abd24e3bdad66cbe4c7e7480eaef16.
show deprecation warning correctly for lambda(&b)
lambda(&b) where b is given block of method (like: def foo(&b))
should warn correctly.
[Feature #17361]
Also labmda(&labmda_block) or lambda(&:to_s) (Symbol#to_proc)
should not warn (but I'm not sure who cares about it).
Actions
Like0
Like0Like0Like0