0

下面的| |周围profile叫什么,它是什么意思,为什么它在后面do?我认为do后面是一个循环块左右。

ticks = get_all[0...MAX].map do |profile|
  # ...
end
4

4 回答 4

1

它们是定义块的语法的一部分。我喜欢解释它的方式是管道看起来像一个幻灯片,管道内的那些变量“滑动”到它们下面的代码块中。

本质上,管道中的变量可用于块。在迭代的情况下,变量将代表您正在迭代的任何元素。

于 2013-10-22T23:38:52.510 回答
1

它就像一个 foreach,所以 profile 在每个函数调用中都是不同的值,get_all 中每个元素一个函数调用。

看到这个:

my_array = [:uno, :dos, :tres]
my_array.each do |item| 
    puts item
end
于 2013-10-22T23:27:05.780 回答
0

竖线字符分隔块定义的参数列表,就像括号分隔方法定义的参数列表一样。因此,在此代码段中:

def foo(bar, baz) end

some_method_that_takes_a_block do |bar, baz| end

括号和管道具有完全相同的用途。

于 2013-10-23T15:32:52.093 回答
0

我将使用这个例子来尝试向你解释这个概念。

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

James
Bob
Frank

所以在这里,我们有很多朋友:詹姆斯、鲍勃和弗兰克。

为了遍历它们,我们在数组上调用#each 方法。该方法将从我的数组中的第一项开始并在其上调用块。

本质上,我当前迭代的项目被传递给两个管道字符内的变量。您可以调用它|buddy|并将块更改为{ |buddy| puts buddy },它仍然会做同样的事情。

于 2013-10-22T23:50:04.747 回答