什么| lang |这部分意味着每种方法?这是从哪里来的?

时间:2014-10-14 15:41:01

标签: ruby

我正在阅读Chris Pine的“学习编程”第7章阵列和迭代器。 他通过以下示例介绍了每种方法:

languages = ['English', 'German', 'Ruby']

languages.each do |lang|
  puts 'I love ' + lang + '!'
  puts 'Don\'t you?'
end

puts 'And let\'s hear it for C++!'
puts '...'

不难理解它的整体效果如何,但我无法弄清楚|lang|部分来自何处。在它可以这样使用之前,不应该分配/命名或者其他东西吗?所以计算机可以知道" lang"是指? ||围绕lang做些什么吗?或者ruby只知道lang的意思吗?

我担心这个问题太基本了,但我希望有人可以帮我一点......

4 个答案:

答案 0 :(得分:4)

lang是一个用于保存languages数组元素的变量。 ||内的任何变量都将用于从数组中获取单个元素。因此,每次循环执行时,数组中的元素将弹出并保存在名为lang的变量中,lang保存的数据将使用puts方法显示。

答案 1 :(得分:3)

each方法逐个生成每个元素,并将其分配给变量lang

在内部,each方法实现如下:

def each
  index = 0
  while index < array.length
     yield array[index]
     index += 1
  end
end

答案 2 :(得分:2)

|lang|是一个块变量。如果删除代码,可以看到.each方法正在迭代languages数组并将数组元素分配给块变量:

languages = ['English', 'German', 'Ruby']

languages.each do |lang|
  puts lang
end

#=> English
#=> German
#=> Ruby

多行块使用do/end语法(如示例所示),单行块使用大括号语法。例如:

languages = ['English', 'German', 'Ruby']

languages.each { |lang| puts lang}

答案 3 :(得分:1)

听起来,在上面的示例中,您创建了一个存储多个语言变量的数组。

然后,您迭代数组中的所有三个元素,并使用名为 lang 的变量表示每个元素。

lang,它在括号内只是一个变量。

希望这有助于你