请考虑以下代码:
board = entities.each { |e| return if not findBoard( e ).nil? }
它应该完全相同:
for e in entities
board = findBoard( e )
if not board.nil?
break
end
end
但是第一个没有用,而第二个没问题。
entities
是Entity
个对象的数组,findBoard()
返回Board
个对象或nil
。
Entity
和Board
不是相关的类。
我知道第二个代码工作正常,但是因为我开始学习Ruby,我想知道是否有更优雅的方法来做这个,所以我问,each
方法是否有可能返回一个不同的对象类型,而不是数组中的对象(我猜它应该)?
非常感谢。
答案 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
find
与each
的工作方式相同,只是一旦将电路板设置为非零值,它就会短路。
答案 3 :(得分:-1)
board = nil
entities.each { |e| board = findBoard(e) ; break unless board.nil?}