Ruby在“中返回不同的类型”;数组。每个; 请考虑此代码: board = entities.each { |e| return if not findBoard( e ).nil? }
它的作用应与以下内容完全相同:Ruby在“中返回不同的类型”;数组。每个; 请考虑此代码: board = entities.each { |e| return if not findBoard( e ).nil? },ruby,arrays,idioms,Ruby,Arrays,Idioms,它的作用应与以下内容完全相同: for e in entities board = findBoard( e ) if not board.nil? break end end 但是第一个不起作用,而第二个很好 实体是实体对象的数组,并且findBoard()返回板对象或零 实体和董事会是不相关的类别 我知道第二个代码可以很好地工作,但由于我开始学习Ruby,我想知道这是否是一种更优雅的方法,所以我问,每
for e in entities
board = findBoard( e )
if not board.nil?
break
end
end
但是第一个不起作用,而第二个很好
实体
是实体
对象的数组,并且findBoard()
返回板
对象或零
实体
和董事会
是不相关的类别
我知道第二个代码可以很好地工作,但由于我开始学习Ruby,我想知道这是否是一种更优雅的方法,所以我问,每个
方法是否可以返回不同于数组中对象的对象类型(我想应该是这样的)
非常感谢。试试:
board = nil
entities.each { |e| board = findBoard(e) ; break unless board.nil?}
不幸的是,在Ruby中没有完全干净的方法来实现这一点。我建议穿稍微丑一点的
board = nil
entities.find { |e| board = findBoard( e ) }
board
find
的工作原理与每个
相同,只是只要电路板设置为非零值,它就会短路。您可以使用:
它不起作用
board
在赋值后仍然是一个实体
数组,而不是findBoard()
返回的board
。这不等于board=entities.detect{e | findBoard(e)}
?@Stefan-detect将返回board存在的实体,而不是board。@BroiSatse啊,你说得对!使用nil?
进行测试只有在您希望board
为literalfalse
时才真正相关,这里可能不是这样。一个更简洁的if board
在这里就足够了。Stylewise,if not.board.nil?;打破end
最好写为除非板断开。nil?
,或者根据@tadman的建议,如果板断开,则写为断开。将板分配两次,一次在循环中,一次在外部???@mdesantis-如果没有找到板,则返回实体。使用find
返回nil
。是的,我在之后意识到了这一点;无论如何,+1这个看起来最干净的解决方案就是用实体替换条目
,比如OP中的,用b
替换检测块中的变量名(例如),因为元素现在是板,它可能会与以前用于收集的变量混淆。Stefan,我给你+1是为了聪明,但我必须问:你真的会用这个,而不是其他答案,或者简单的东西,比如,e=entities.find{..};e?:find_board(e):nil?
别忘了:你发誓了。@CarySwoveland可能不是,我会使用一个简单的循环并将其包装在一个方法中:)为什么丑陋?我觉得它既高效又容易阅读。您可以添加board
作为第三行,以强调find
不会返回答案。非常好。效果很好,清晰易读。我从来没有想过把板=
放在里面。。。真的谢谢。
board = nil
entities.find { |e| board = findBoard( e ) }
board
board = entities.lazy.map { |e| find_board(e) }.detect { |b| b }