2013-05-16 150 views

回答

15

结肠明星本身并不意味着任何Ruby。它只是一个symbol,您可以将符号传递给可枚举的inject方法。该符号指定要在枚举元素上使用的方法或运算符。

所以例如为:

(1..5).inject(:*) #=> 1 * 2 * 3 * 4 * 5 = 120 
(1..5).inject(:+) #=> 1 + 2 + 3 + 4 + 5 = 15 

|| 1部分意味着,如果inject返回一个falsey值,1来代替。 (在你的榜样永远不会发生。)

+0

您也可以将simmilar结构传递给其他方法,例如。地图,每个...(1..5).map(&:to_s),你也可以阅读关于to_proc方法 – Sebastian

+0

@Mischa谢谢! –

+0

@GrayKemmey欢迎您! – Mischa

2

它绝对平等。你可以用各种方式,根据你的口味。

+0

不完全是在陈述相等,因为''|| 1没有使用过。右手始终如此。 – vgoff

3

test.rb:

def do_stuff(binary_function) 
    2.send(binary_function, 3) 
end 

p do_stuff(:+) 
p do_stuff(:*) 

$红宝石test.rb

如果您传递一个方法名称作为一个符号,它可以通过发送来调用。这就是注射和朋友正在做的事情。

关于||部分,如果左侧返回nil或false,lhs || 1将返回1

相关问题