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不出现异常
)。
分享到:
相关推荐
主要介绍了Ruby中的return、break、next详解,这三个关键字一般都用来作为语句中断或返回功能,本文就详细介绍了相关内容,需要的朋友可以参考下
在工作中,他希望有一种比 Perl 强大,比 Python 更面向对象的语言。从1993年2月,他开始设计一个全新的自己的语言,1994年12月发布了第一个 alpha版本,并且将这种新语言定名为Ruby(红宝石)。 本教程内含多部中文...
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...
ruby中文教程,从基础到深入的让你学习ruby
Ruby中文文档.CHM 方便ruby or rails学习.
Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码
ruby中英文api 适合于初学者。 希望能给大家带来一些帮助
ruby 中文文档 必备资料 一定要下哦
Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能
begin和end是ruby的关键字,但是Range中也有名称为begin和end的实例方法。现在问题来了:怎么创建它们的别名方法? 如果用class Range;alias begin_x begin end是不行的,ruby以为后面一个begin是某个语法块的开头啊...
Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...
ruby中文手册 chm 内容挺多的 包含: 1、Ruby用户指南 2、Ruby参考手册 3、RGSS入门教程 4、Programming Ruby的翻译
nb60_trans_old_zh_CN,ruby中文文档中心资料
在Ruby中,{}或do…end之间的代码是一个代码块。代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用。例如: [1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts...
Ruby中机器学习的实用资源
Watir - 在Ruby中Web应用程序测试
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
在这篇文章中阅读有关Ruby Next背后动机的更多信息: 。 帖子会谈(RubyConf 2019)例子Ruby宝石 Rails应用 姆鲁比请提交PR,将您的项目添加到列表中!目录总览Ruby Next由两部分组成: core和language 。 Core通过...
握Ruby, 找到属于自己的快乐编程方式, 做到融会贯通并灵活运用到实际工作中。 本书适合Ruby初学者学习参考, 有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点, 本书也能提供不少帮助。