"The Rails Way" 第 3 版 proc 练习错误页面 360

"The Rails Way" 3-rd edition proc exercise error page 360

我正在做书 "The Rails Way" 第 3 版 11.2.5 将代码存储为 Proc 对象中第 360 页的练习,但我得到了错误而不是正确的输出。 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]

尝试

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

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

def greet(&block)

那 & 意味着它不是 "normal parameter" 而是一个块、一个过程、一个 lambda,即使在调用该方法时你也必须这样说。

这是因为如果你有一个方法接受一个参数和一个块,而你只传递其中一个,否则你无法说出它们是哪一个。