Ruby跳出多层循环 catch...throw

在编码的时候,有时候会遇到嵌套循环的情况,最内部的循环结束的时候,想跳出所有循环,这个时候我们往往采用通过内部循环设置一个flag来控制外部跳出循环条件,比如:

 1 #encoding:utf-8
 2 
 3 for i in (1..20) do
 4     flag = false
 5     puts "i = #{i}"
 6     for j in (40..60) do
 7         puts "j = #{j}"
 8         if(45 == j) then
 9             flag = true
10             break
11         end
12     end
13     if flag then
14         break
15     end
16 end

看一下打印结果

1 i = 1
2 j = 40
3 j = 41
4 j = 42
5 j = 43
6 j = 44
7 j = 45

代码这样运行是没有问题的,但是代码看起来比较臃肿,如果我们使用catch...throw的话可以简写这段代码,会清爽一些

 1 #encoding:utf-8
 2 catch :for_loop do
 3     for i in (1..20) do
 4         flag = false
 5         puts "i = #{i}"
 6         for j in (40..60) do
 7             puts "j = #{j}"
 8             if(45 == j) then
 9                 throw :for_loop
10             end # if
11         end # for
12     end #for
13 end #catch

这样修改代码后,看起来是不是清爽了一些,运行结果仍然和上面一样。例子比较简单,希望对您有用!文笔很差,不足之处还请指出!非常感谢!

posted @ 2013-12-15 11:22  萌秀才  阅读(1600)  评论(0编辑  收藏  举报