Ruby中的break,next关键字

break,next是Ruby里面对循环控制的两个关键字,使用break可以退出循环,和Java的同名关键字的含义相同,next类似于Java中的continue,跳到下一个循环中,而Ruby中大量使用block进行迭代,其中也可以用这两个关键字进行循环的跳转,是我一度误以为这两个关键字在这两种情况下是一样的。
直到我一天翻看《Programing Ruby》中关于next和break在block的作用时,我才发现原来这两个是不一样的,书中说:next只会退出这个block作用域,而break则是退出block所在的方法,于是我做了如下的实验测试一下这两个关键字在block的行为。

def expmeth
count=0
while count<3
count+=1
puts "before in while block #{count-1}" #1
yield count-1
puts "after in while block #{count-1}" #2
end

puts "out while block" #3
end

expmeth{|i|

puts "block #{i}"
break if i==1
}

执行结果:
before in while block 0
block 0
after in while block 0
before in while block 1
block 1
可见,block中执行break后,语句直接退出方法,2,3语句都没有执行。
将上述代码中break换成next,继续执行,得到的结果:
before in while block 0
block 0
after in while block 0
before in while block 1
block 1
after in while block 1
before in while block 2
block 2
after in while block 2
out while block
可见,block中执行next后,只是退出block本身,而不是退出本次循环,所以2语句得到了执行。
在一些方法中,位置3的语句经常有一些资源释放的语句,如何保证这个语句一定能执行而不受block中的break影响呢,这个很简单,可以通过begin...ensure...end,将语句放入ensure快中,就可以保证资源的释放了,即使你可以确保执行的代码一定不会出现异常(这也不可能,因为没法保证block不出现异常 :) )。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值