下面的| |
周围profile
叫什么,它是什么意思,为什么它在后面do
?我认为do
后面是一个循环块左右。
ticks = get_all[0...MAX].map do |profile|
# ...
end
它们是定义块的语法的一部分。我喜欢解释它的方式是管道看起来像一个幻灯片,管道内的那些变量“滑动”到它们下面的代码块中。
本质上,管道中的变量可用于块。在迭代的情况下,变量将代表您正在迭代的任何元素。
它就像一个 foreach,所以 profile 在每个函数调用中都是不同的值,get_all 中每个元素一个函数调用。
看到这个:
my_array = [:uno, :dos, :tres]
my_array.each do |item|
puts item
end
竖线字符分隔块定义的参数列表,就像括号分隔方法定义的参数列表一样。因此,在此代码段中:
def foo(bar, baz) end
some_method_that_takes_a_block do |bar, baz| end
括号和管道具有完全相同的用途。
我将使用这个例子来尝试向你解释这个概念。
friends = ["James", "Bob", "Frank"]
friends.each { |friend| puts friend }
James
Bob
Frank
所以在这里,我们有很多朋友:詹姆斯、鲍勃和弗兰克。
为了遍历它们,我们在数组上调用#each 方法。该方法将从我的数组中的第一项开始并在其上调用块。
本质上,我当前迭代的项目被传递给两个管道字符内的变量。您可以调用它|buddy|
并将块更改为{ |buddy| puts buddy }
,它仍然会做同样的事情。