红宝石适用看跌数组
对于数组中的元素回应,我可以做红宝石适用看跌数组
[1,2,3].each(&:to_s)
方法,但对于:
[1,2,3].each {|i| puts i}
我不能这样做:
[1,2,3].each(&:puts)
如何优雅地将Kernel
方法(如puts
)应用于数组中的对象?会不会有Rubyish的方式?
puts
是一种方法,在定义Kernel
将其转换为proc
,使用:
[1,2,3].each(&method(:puts))
Symbol#to_proc
有特定的含义,基本上本身发送到接收器。
有人可能的任何方法转化为proc
通过它来阻止:
%w[1 2 3].map(&method(:Integer))
#⇒ [1, 2, 3]
谢谢。正是我在找什么。现在,我只需要等10分钟,然后SO就可以将其标记为“答案” –
为了让其他人更好地了解这个问题,在这种情况下,前导'&'是通过对象的参数将参数转换为块'to_proc'方法。例如'&:to_s'(问题是'Symbol#to_proc')和'&method(:puts)'(如答案中)是'Method#to_proc'。对于'Symbol#to_proc',将'Symbol'发送到block参数,其中'Method#to_proc'将block参数发送给'Method' – engineersmnky
这很整洁,除了我认为OP的最后一个例子更具惯用性,更多重要的是,比这些例子更容易理解...... – maerics
你的最后一个例子是惯用的红宝石:
[1,2,3].each { |x| puts x }
当然,还有其他方法可以做到同样的事情,但上面的代码很简单,任何Rubyist都很容易理解。
你的最后一个例子对我来说似乎很红宝石...... – maerics
'puts [1,2,3]'? –