2013-10-22 61 views
0

下面調用| |profile是什麼,它是什麼意思,爲什麼它在do之後?我認爲do後跟一個循環塊左右。什麼|變量|語法的意思?

ticks = get_all[0...MAX].map do |profile| 
+0

希望這可以在這裏找到答案:http://stackoverflow.com/questions/665576/what-are-those-pipe-symbols-for-in-ruby][1] [1]:HTTP ://sackoverflow.com/questions/665576/what-are-those-pipe-symbols-for-in-ruby –

+1

搜索「ruby教程塊」 – user2864740

回答

1

它像一個foreach,所以簡檔將是在每個函數的調用的一個不同的值,在每get_all元件中的一個函數調用。

看到這一點:

my_array = [:uno, :dos, :tres] 
my_array.each do |item| 
    puts item 
end 
+0

謝謝!以及什麼|個人資料|然後? abs()的值? – galaapples

+2

@galaapples編號'| parameter1,parameter2,.. |'僅僅是用來引入*塊參數*的語法,並且與數學運算符無關。我提供了一個有用的搜索短語作爲主要評論。 – user2864740

+0

如果您現在「明白了」,將其標記爲已接受,然後再繼續前進,以免因Google搜索引擎陷入低谷 – AwokeKnowing

1

它們的語法定義一個塊的一部分。我喜歡解釋它的方式是管道看起來像一張幻燈片,管道內的這些變量「滑動」到它們下面的代碼塊中。

本質上,管道中的變量可用於塊。在迭代的情況下,變量將代表您正在迭代的任何元素。

+1

如果非常有趣,我相信該語法的實際起源是smalltalk – jozefg

0

我會用這個例子來試圖向你解釋這個概念。

friends = ["James", "Bob", "Frank"] 
friends.each { |friend| puts friend } 

James 
Bob 
Frank 

所以在這裏,我們有我們的朋友陣容:詹姆斯,鮑勃和弗蘭克。

爲了迭代它們,我們調用數組上的#each方法。該方法將從我的數組中的第一個項目開始,並調用它的塊。

本質上,我正在迭代的項目被傳遞給兩個管道字符中的變量。你可以稱它爲|buddy|,並將該塊更改爲{ |buddy| puts buddy },它仍然會執行相同的操作。

0

管道字符分隔塊定義的參數列表,就像括號分隔方法定義的參數列表一樣。因此,在此代碼段中:

def foo(bar, baz) end 

some_method_that_takes_a_block do |bar, baz| end 

圓括號和管道的目的完全相同。