4

I wonder, isn't it possible to call a method using & operator with parameters?

items.each &:my_proc # ok
items.each &:my_proc(123, "456") # ops!
4

2 回答 2

7

不,这是不可能的。使用完整的形式。

items.each{|i| i.my_proc(123, '456')}

查看Symbol#to_proc的来源以了解“为什么”。

于 2013-07-24T10:21:34.770 回答
3

您可以使用一些技巧并获得类似的东西:

class Symbol
  def [](*args)
    proc{|obj| obj.send(self, *args) }
  end
end

[123.456, 234.567].map(&:round[2])
#=> [123.46, 234.57]

不过,我强烈反对在生产代码中使用,因为 gem 等可能依赖于Symbol#[]. 这只是一件有趣的事情;-)

于 2013-07-24T10:47:56.680 回答