【问题标题】:What is the proper way to use methods that return an enumerator in Ruby array?使用在 Ruby 数组中返回枚举数的方法的正确方法是什么?
【发布时间】:2012-08-12 11:03:32
【问题描述】:

Ruby array 中的许多方法在不带参数或块(indexkeep_ifeachdrop_while 等等)的情况下调用时会返回一个枚举器。

  • 什么时候适合使用这种形式的方法,而不是用块来调用它们?

【问题讨论】:

    标签: ruby-on-rails ruby coding-style


    【解决方案1】:

    从文档到Enumerator

    大多数方法有两种形式:块形式,内容是 对枚举中的每个项目进行评估,以及一个非块形式 返回一个包装迭代的新枚举器。

    这允许您将枚举器链接在一起。例如,您可以 将列表的元素映射到包含索引和元素的字符串 作为字符串通过:

    puts %w[foo bar baz].map.with_index {|w,i| "#{i}:#{w}" }
    # => ["0:foo", "1:bar", "2:baz"]
    

    枚举器也可以用作外部迭代器。例如, Enumerator#next 返回迭代器的下一个值或引发 如果 Enumerator 在末尾,则停止迭代。

    e = [1,2,3].each   # returns an enumerator object.
    puts e.next   # => 1
    puts e.next   # => 2
    puts e.next   # => 3
    puts e.next   # raises StopIteration
    

    很抱歉复制粘贴,但我无法更好地解释。

    【讨论】:

      【解决方案2】:

      Enumerator 类存在的主要原因是方法链:

      array.each.with_object [[], []] { |element, memo| ... }
      

      所以基本上,你不需要担心这个。

      【讨论】:

        猜你喜欢
        • 2016-11-05
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 2015-09-04
        相关资源
        最近更新 更多