【问题标题】:Access array value from Ruby Enumerator block从 Ruby Enumerator 块访问数组值
【发布时间】:2013-06-20 05:34:28
【问题描述】:

如何在 Ruby 中从块内访问数组?

例如:

[1,2,3].each{|e| puts THEWHOLEARRAY.inspect }

THEWHOLEARRAY 应该在哪里返回 [1,2,3]

【问题讨论】:

    标签: ruby arrays enumerable


    【解决方案1】:

    您正在寻找的是 tap,已经实现:

    [1, 2, 3].tap { |ary|
      puts ary.inspect
      ary.each { |e|
        # ...
      }
      'hello' ' ' + 'world' # return value demo
    } # returns the original array
    

    ergo 方法,即将推出:

    class Object; def ergo; yield self end end # gotta define it manually as of Ruby 2.0.0
    [1, 2, 3].ergo { |ary|
      puts ary.inspect
      ary.each { |e|
        # ...
      }
      'hello' ' ' + 'world' # return value demo
    } # returns the block return value
    

    【讨论】:

    • 令人惊奇的是,白天我看到这个tap 很多次,想了解更多:-)
    • @IlyaNovojilov:函数式编程和tap 是当今的新时尚。
    【解决方案2】:

    不清楚你想做什么。你的意思是这样的吗?:

    THEWHOLEARRAY = [1,2,3]
    THEWHOLEAREAY.each{ |e|
      puts THEWHOLEARRAY.inspect
    }
    

    Ruby 允许您访问块外的变量。通常它会是另一个变量,而不是您正在迭代的那个。

    【讨论】:

      【解决方案3】:

      你不能。块变量仅保存有关每次迭代的单个元素的信息。它没有整个数组的信息。此外,each 将迭代数组中元素的数量。你要检查那么多次吗?这没有意义。

      【讨论】:

      • 实际上的任务是选择数组中like的元素,如果没有similar元素则返回元素。喜欢:[ {title:'h1',value:'ttt'}, {title:'h2',value:'h2'}, {title:'h1',category:5,value:'needs to be returned instead instead of first one} ] 这样做的更好方法是什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多