“The Rails Way”第3版proc练习错误第360页

时间:2016-10-29 13:22:21

标签: ruby irb proc

我正在练习第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]

1 个答案:

答案 0 :(得分:2)

尝试

p greet(&philippe_proc)    
p greet(&philippe_lambda) 

块是特殊参数。将greet定义为

def greet(&block)

那&amp;意味着它不是正常参数&#34;但是一个块,一个proc,一个lambda,你必须说,即使你打电话给这个方法。

这是因为如果你有一个带参数和一个块的方法,你只传递其中一个,你就不能说出它们中的哪一个。