在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