这article条涉及到问题,但没有给出解决方案.
当我想要编写一个方法,并有 Select 地向它传递一个参数,该参数可以是null或????
(proc
、lambda
、method
、block
,?).现在我们把它叫做block
,因为block
是有效的.block
接受一个必需的参数.该方法的一个示例和对它的调用如下:
#!/usr/bin/env ruby
def foo(&proc)
puts "before"
if proc
yield "passed to proc"
end
puts "after"
end
def add_message(s)
puts "from add_message #{s}"
end
foo { |s| add_message(s) }
foo
结果是:
before
from add_message passed to proc
after
before
after
太棒了但是,我想做的是能够这样称呼foo
:foo(&:add_message)
.但我做不到.改变上面第15行,我得到:
before
./temp.rb:11:in `add_message': wrong number of arguments (given 0, expected 1) (ArgumentError)
from ./temp.rb:6:in `foo'
from ./temp.rb:15:in `<main>'
正如上面的文章所提到的,算术现在是-2.那么,我如何编写一个简单的方法,比如add_message
,我可以用&:add_message
.或在99.99%的情况下,请让我在正确的轨道上做这件事.