2013-10-22 140 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 

圆括号和管道的目的完全相同。