【发布时间】:2022-07-24 08:16:02
【问题描述】:
这个article 涉及问题但没有给出解决方案。
这开始于我想编写一个方法并可选地传递一个可以为 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>'
而且,正如上面的文章所提到的,arity 现在是 -2。那么,我该如何编写一个像add_message 这样可以与&:add_message 一起使用的简单方法。或者!!!就像 99.99% 的情况一样,请让我在正确的轨道上执行此操作。
【问题讨论】: