Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby在“中返回不同的类型”;数组。每个; 请考虑此代码: board = entities.each { |e| return if not findBoard( e ).nil? }_Ruby_Arrays_Idioms - Fatal编程技术网

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
为literal
false
时才真正相关,这里可能不是这样。一个更简洁的
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 }