【问题标题】:What does |lang| part mean in this each method? Where does this come from?|lang| 是什么意思每个方法中的部分意思是什么?这是从哪里来的?
【发布时间】:2014-12-09 11:36:20
【问题描述】:

我正在阅读 Chris Pine 的《学习编程》第 7 章数组和迭代器。 他用下面的例子介绍了 each 方法:

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 是什么意思?

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

【问题讨论】:

  • 您是否阅读了代码 sn -p 后面的文字,它解释了所有内容:"翻译成英文,上面的程序读起来是这样的:对于languages 中的each 对象,指向变量lang 到对象,然后做我告诉你的一切,直到你走到最后。”
  • 你需要学习一个好的 Ruby 教程。 |lang| 是 Ruby 将参数表示到块的方式,很早就会介绍。
  • 谢谢大家的帮助!!我想我现在明白了。每个方法基本上产生 AND 分配 ||同时,对吧? :) Kev,我也读过那段文字,但最初对我来说没有意义,因为在“变量”之前没有提到“变量”。
  • 附言。每个人对同一件事的解释都略有不同,这真是太好了,他们都帮助我加强了对此的理解。谢谢!
  • @gballoon - 真正的道歉,并不意味着这听起来轻率。想也许你不会读那么远。

标签: ruby


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    在内部,each 方法是这样实现的:

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

    【讨论】:

      【解决方案3】:

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

      然后您遍历数组中的所有三个元素,并用一个名为 lang 的变量来表示每个元素。

      方括号内的lang只是一个变量。

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        |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}
        

        【讨论】:

          猜你喜欢
          • 2018-10-29
          • 1970-01-01
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          • 2011-06-26
          • 2013-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多