Ruby在" array.each"中返回不同的类型。

时间:2014-05-21 14:01:56

标签: ruby arrays idioms

请考虑以下代码:

    board = entities.each { |e| return if not findBoard( e ).nil? }

它应该完全相同:

    for e in entities
        board = findBoard( e )

        if not board.nil?
            break
        end
    end

但是第一个没有用,而第二个没问题。

entitiesEntity个对象的数组,findBoard()返回Board个对象或nil

EntityBoard不是相关的类。

我知道第二个代码工作正常,但是因为我开始学习Ruby,我想知道是否有更优雅的方法来做这个,所以我问,each方法是否有可能返回一个不同的对象类型,而不是数组中的对象(我猜它应该)?

非常感谢。

4 个答案:

答案 0 :(得分:4)

您可以使用lazy enumerator

board = entities.lazy.map { |e| find_board(e) }.detect { |b| b }

答案 1 :(得分:2)

尝试:

board = entities.find {|e| b = findBoard(e) and break b }

答案 2 :(得分:2)

遗憾的是,在Ruby中没有完全干净的方法。我建议稍微丑陋

board = nil
entities.find { |e| board = findBoard( e ) }
board

findeach的工作方式相同,只是一旦将电路板设置为非零值,它就会短路。

答案 3 :(得分:-1)

board = nil
entities.each { |e| board = findBoard(e) ; break unless board.nil?}
相关问题