对于数组元素响应的方法,我可以
[1,2,3].each {|i| puts i}
但是:
[1,2,3].each(&:puts)
我做不到:
Kernel
如何优雅地将puts
方法(如e.preventDefault()
)应用于数组中的对象?会有更多的Rubyish方式吗?
答案 0 :(得分:5)
你的最后一个例子是惯用的Ruby:
[1,2,3].each { |x| puts x }
当然还有其他方法可以做同样的事情,但上面的代码很简单,任何Rubyist都能理解。
答案 1 :(得分:4)
puts
是一种在Kernel
上定义的方法,可将其转换为proc
,使用:
[1,2,3].each(&method(:puts))
Symbol#to_proc
具有特定含义,基本上将自己发送给接收者。
可以将任何方法转换为proc
以将其传递给阻止:
%w[1 2 3].map(&method(:Integer))
#⇒ [1, 2, 3]