首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby lambda参数

Ruby lambda参数
EN

Stack Overflow用户
提问于 2010-02-10 04:25:16
回答 2查看 32.2K关注 0票数 25

这段代码按预期工作(什么也不做,甚至不会产生警告/错误):

代码语言:javascript
复制
l = lambda {|i|}
l.call(1)

此代码生成警告(警告:一个块参数有多个值(0代表1)):

代码语言:javascript
复制
l = lambda {|i|}
l.call

此代码失败并返回错误(ArgumentError:参数数量错误(2为0)):

代码语言:javascript
复制
l = lambda {|i, y|}
l.call

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

从第二个例子中我发现它不是这样的,为什么它在只给出一个参数的情况下工作,而在有多个参数的情况下按预期工作(由于错误而失败)?

PS: ruby 1.8.6 (2008-08-11补丁级别287)通用-darwin9.0

更新:我已经用ruby 1.9.1p376检查了这些示例。它按照预期工作--第二个例子也产生了一个错误。看起来这是1.8版本(或<=1.8)的一个特性

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-10 04:39:49

Lambda就是这样奇怪的,当你的参数少于两个时,它们的行为是不同的。有关更多信息,请查看this article

票数 14
EN

Stack Overflow用户

发布于 2010-02-10 04:28:12

This script会教你所有你需要知道的关于Ruby闭包的知识。

代码语言:javascript
复制
# 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
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2232283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档