2013-05-16 149 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

相關問題