2015-04-01 45 views
1

假设我已经做红宝石称为块的集合

callables = [] 
callables << block1 
callables << block2 
callables << block3 
callables << block4 

内置可调用对象的数组,后来我想打电话给这些块。我知道我能做到

callables.each { |block| block.call } 

但我想知道如果我能把它甚至通过调用类似

callables.each :call 

我曾尝试上面的代码更简单,但有引发ArgumentError。 ruby是否支持这种语法?

+3

你可以做'callables.each(&:call)'在对象上调用'to_proc',并把它作为一个块传递给方法。 – cristian 2015-04-01 17:56:49

回答

3

你应该尝试:

callables.each &:call 

Array#each不接受任何参数。这就是为什么当您编写callables.each :call,:call时,符号传递给方法each作为参数。但是当你前缀:call&,each知道你给它一个作为参数,所以它会工作。

+1

值得注意的是'each(&:call)'是一个特例,并且作为块参数传入。 ':call'上的'&'调用'to_proc',将它变成一个过程。 – tadman 2015-04-01 18:04:53

+0

@tadman是的..的确如此。 – 2015-04-01 18:08:06

+0

所以每个(to_proc:call)也会起作用? – 2015-04-01 18:18:01