【发布时间】:2013-07-24 10:19:57
【问题描述】:
我想知道,是不是可以使用带参数的&操作符来调用方法?
items.each &:my_proc # ok
items.each &:my_proc(123, "456") # ops!
【问题讨论】:
标签: ruby
我想知道,是不是可以使用带参数的&操作符来调用方法?
items.each &:my_proc # ok
items.each &:my_proc(123, "456") # ops!
【问题讨论】:
标签: ruby
【讨论】:
您可以使用一些技巧并获得类似的效果:
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#[]。这只是一件有趣的事情;-)
【讨论】:
bind_args 代替[]。虽然使用起来不那么漂亮,但在生产代码中会更安全。
map{|x| x.round(2)} 比map(&:round.bind_args(2)) 更短更好读:)