我正在练习第360页的书“The Rails Way”第3版11.2.5将代码存储为Proc对象,我得到错误而不是正确的输出。 proc.rb文件中的代码
def greet(&block)
block.call
"Good morning, everyone."
end
philippe_proc = Proc.new { return "Too soon, Philippe!" }
philippe_lambda = lambda { return "Too soon, Philippe!" }
p greet(philippe_proc) # Too soon, Philippe!
p greet(philippe_lambda) # Good morning, everyone.
,输出
ruby proc.rb
proc.rb:1:in `greet': wrong number of arguments (given 1, expected 0) (ArgumentError)
from proc.rb:7:in `<main>'
ruby -v ruby 2.3.0p0(2015-12-25修订版53290)[x86_64-linux]
答案 0 :(得分:2)
尝试
p greet(&philippe_proc)
p greet(&philippe_lambda)
块是特殊参数。将greet
定义为
def greet(&block)
那&amp;意味着它不是正常参数&#34;但是一个块,一个proc,一个lambda,你必须说,即使你打电话给这个方法。
这是因为如果你有一个带参数和一个块的方法,你只传递其中一个,你就不能说出它们中的哪一个。