【问题标题】:break and return in ruby, how do you use them?ruby 中的 break 和 return,你如何使用它们?
【发布时间】:2011-06-03 20:25:26
【问题描述】:

我刚刚向question 询问了关于 return 的问题,它似乎与 break 做同样的事情。你如何使用return,你如何使用break,例如在你编写的实际代码中,以解决可以使用这些构造的问题。

我不能真正发布示例,因为我不知道如何使用这些示例,所以它们没有多大意义。

【问题讨论】:

标签: ruby return break


【解决方案1】:

另一个例子是,如果您在一个方法中有两个循环,如果您想退出第一个循环并继续第二个循环,请在第一个循环中使用 break,反之亦然:

def testing(method)
x=1
  10.times do
    if(x == 2)
     break if method == "break"
    end
   x+=1
  end
  10.times do
   if(x == 5)
     return if method == "return"
   end
  x+=1
  end 
end

【讨论】:

    【解决方案2】:

    我想编辑批准的答案以简化示例,但我的编辑被拒绝,并建议提出新的答案。所以这是我的简化版:

    def testing(target, method)
      (1..3).each do |x|
        (1..3).each do |y|
         print x*y
         if x*y == target
           break if method == "break"
           return if method == "return"
         end
        end 
      end
    end
    

    我们可以看到尝试的不同:

    testing(3, "break")
    testing(3, "return")
    

    第一个结果(break 语句仅在达到3 时才退出最内层循环):

    1232463
    

    最后的结果(return 语句退出整个函数):

    123
    

    【讨论】:

      【解决方案3】:

      return 退出整个函数。

      Break 从最里面的循环退出。

      因此,在这样的函数中:

      def testing(target, method)
        (0..100).each do |x|
          (0..100).each do |y|
           puts x*y
           if x*y == target
             break if method == "break"
             return if method == "return"
           end
          end 
        end
      end
      

      要查看差异,请尝试:

      testing(50, "break")
      testing(50, "return")
      

      【讨论】:

      • 同意,这是一个非常好的例子!感谢您的澄清
      • 另外请记住,在从方法内部调用的过程中使用 return 也会导致方法返回。请务必查看 lambdas 和 procs 之间的差异。
      • 我建议更改为(0..10).eachtesting(5, "break") 以提高可读性。谢谢你,很好的答案
      • 还有next,它在循环中移动到next迭代,并且也接受一个值,就像return和break一样。
      【解决方案4】:

      break 从循环内部调用。它会将您置于您所在的最内层循环之后。

      return 从方法内部调用。它会返回你告诉它的值,并把你放在它被调用的地方。

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 2011-05-30
        相关资源
        最近更新 更多