在ruby中转发/委派2个参数

在ruby中转发/委派2个参数,ruby,ruby-std,Ruby,Ruby Std,在本例中,@subscribers是一个散列和@broker。add接受两个参数:def broker(k,v) 这会导致ArgumentError:参数数目错误(给定1,预期为2) 有没有办法使用可转发的或类似的解决方案而不出现此问题?如何轻松地将包含2个元素的数组委托给包含两个参数的方法?写作的等价物是什么: class MyClass extend Forwardable def_delegators :@broker, :add def subscribe_in_broke

在本例中,
@subscribers
是一个
散列
@broker。add
接受两个参数:
def broker(k,v)

这会导致
ArgumentError:参数数目错误(给定1,预期为2)

有没有办法使用
可转发的
或类似的解决方案而不出现此问题?如何轻松地将包含2个元素的数组委托给包含两个参数的方法?写作的等价物是什么:

class MyClass
  extend Forwardable
  def_delegators :@broker, :add

  def subscribe_in_broker
    @subscribers.map(&method(:add))
  end
end

但是使用委托?

看起来该块接收了2个参数,但实际上它只接收了一个参数(2元素数组)。Ruby正在解释
|x,y |
,就好像它是
|(x,y)|
。括号(此处可以省略)将单个参数分解为两部分

当您将
&
与方法一起使用时,它也只会得到一个参数,如果您想对其进行分解,则必须在
x
y
周围使用一组圆括号来显式表示:

  def subscribe_in_broker
    @subscribers.map{|k,v| add(k,v) }
  end
明确地说,这是一个单参数方法,它期望参数是数组。例如,您这样称呼它:
add([1,2])

注意:这与委托无关,只是Ruby假设您打算在一个地方而不是在另一个地方分解结构

一个块(或一个转化为带“&”的过程的方法)可以产生多个参数,但这不是
map
所做的


我不清楚为什么
hash.map{| x,y | add(x,y)}
不能满足您的需要。要解决这个问题,您需要定义自己的
map
函数,该函数将生成2个参数而不是1个参数,这似乎有些过头了。

感谢您提供的有用答案。我的是垃圾(我把它移走是为了避免混淆自己和他人)。
def add((x,y))
end