关于Ruby的lambda参数问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

此代码按预期工作:

l = lambda {|i|}
l.call(1)

此代码会产生警告:

l = lambda {|i|}
l.call

此代码失败并出现错误:

l = lambda {|i, y|}
l.call

我认为lambda需要传递所有参数。

为什么?

提问于
用户回答回答于

lambda很奇怪,当你有两个以上的参数时,他们的行为是不同的。

用户回答回答于

这个脚本将教你关于Ruby中closure的所有知识。

# So, what's the final verdict on those 7 closure-like entities?          
#
#                                                     "return" returns from closure
#                                    True closure?    or declaring context...?         Arity check?
#                                    ---------------  -----------------------------    -------------------
# 1. block (called with yield)       N                declaring                        no
# 2. block (&b => f(&b) => yield)    N                declaring                        no
# 3. block (&b => b.call)            Y except return  declaring                        warn on too few
# 4. Proc.new                        Y except return  declaring                        warn on too few
# 5. proc                                    <<< alias for lambda in 1.8, Proc.new in 1.9 >>>
# 6. lambda                          Y                closure                          yes, except arity 1
# 7. method                          Y                closure                          yes

扫码关注云+社区