`
renzhen
  • 浏览: 251609 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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不出现异常 )。


分享到:
评论
1 楼 orcl_zhang 2011-09-13  
next故名思意,“下一个循环”

相关推荐

    Ruby中的return、break、next详解

    在Ruby编程语言中,`return`、`break`和`next`是三个关键的控制流程语句,它们各自有着特定的用途,特别是在处理代码块(如循环和块方法)时。下面将详细介绍这三个关键字的工作原理及其区别。 1. `return` `return...

    Ruby编程中关于中断和返回的用法教程

    总结一下,Ruby中的`return`、`break`和`next`提供了对代码流程的精细控制: 1. `return` 用于结束方法并返回一个值,如果在`ensure`块中使用,`return`的执行会受到`ensure`的影响。 2. `break` 用于立即退出循环...

    Ruby语言中文教程

    - 控制结构:Ruby中的条件语句有if/else、unless、case,循环有while、until、for以及块(block)和循环控制关键字如break和next。 - 函数与方法:Ruby中的函数定义使用def关键字,方法可以接收可变数量的参数,...

    Ruby编程Ruby Programming

    - **流程控制**:`break`、`next`、`redo`、`retry` #### 2.3 函数与模块 - **函数(方法)**:定义函数使用`def`关键字。 - **模块**:用于组织代码,避免命名冲突,可通过`include`引入模块。 ### 三、面向对象...

    Ruby语言中文教程.rar

    Ruby的流程控制还包含break、next、redo和retry关键字。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,每个值都是对象,包括基本数据类型。类(Class)是创建对象的模板,对象通过方法(Method)进行交互。Ruby...

    Ruby语言入门教程(附源码文件)

    - 控制流程:`break`、`next`、`redo`和`retry`。 3. **函数和方法** Ruby中的函数定义使用`def`关键字,可以有或无返回值。方法可以接受参数,并且支持默认参数、可变参数和块参数。 4. **类与对象** Ruby是...

    RUBY中文教程

    - `break`和`next`用于中断循环。 - `begin-rescue-end`用于异常处理。 4. **函数和方法** Ruby中的函数称为方法。你可以定义自己的方法,使用`def`关键字,结束用`end`。方法调用支持消息传递,即对象调用方法...

    Ruby In a Nutshell

    - `break`、`next`和`redo`控制循环流程。 3. **函数和方法** - Ruby中的函数定义使用`def`关键字,可以接收参数,并支持默认值、可变数量的参数和块参数。 - 方法调用可以使用点操作符或括号,根据上下文自动...

    ruby初级中文教程与实例

    3. 控制结构:包括条件语句(if/else/elsif)、循环(while/until、for、each)、开关语句(case/when)以及break、next、redo和retry等控制流程关键字。 4. 函数和方法:Ruby中的函数定义使用`def`关键字,可以...

    Ruby语言中文教程(附源码)

    3. 控制结构:包括条件语句(if/else/elsif)、循环(while/until、for、times、each)和流程控制(break、next、redo、retry)。 二、面向对象 1. 类与对象:Ruby是完全面向对象的语言,一切皆对象。你可以定义类...

    ruby 中文教程 源代码

    - **关键字**:如 `class`, `def`, `if`, `elsif`, `else`, `case`, `when`, `unless`, `while`, `for`, `next`, `break`, `retry`, `redo` 等。 - **运算符**:包括算术运算符、比较运算符、逻辑运算符等。 - **...

    ruby使用文档

    - `break`、`next`、`redo`用于控制循环流程。 3. **函数与方法**: - Ruby中函数和方法是一致的概念,使用`def`定义,`end`结束。 - 可以定义默认参数、可变参数(`*args`)和关键字参数。 - 方法可以通过`...

    Ruby常见面试题.pdf

    在Ruby中,方法的定义非常灵活,使用`def`关键字: **示例**: ```ruby def greet(name) puts "Hello, #{name}!" end greet("John Doe") ``` #### 7. Ruby中如何处理异常(Exception Handling)?请说明在Ruby中...

    有关Ruby入门文章

    2. 控制结构:Ruby支持常见的控制结构,如if/else、unless、case、while、for以及循环控制语句如break、next等。 3. 函数定义:Ruby使用`def`关键字定义函数,函数名后跟参数列表,最后以`end`结束。Ruby支持块...

    Ruby语言教程大纲.zip

    2. **控制结构**:包括条件语句(如if/else、case)、循环(如while、for、each)以及流程控制(如break、next)。理解这些结构如何控制程序的执行路径至关重要。 3. **数组与哈希**:数组是有序的数据集合,而哈希...

    Ruby最简单的初级教程

    3. 控制结构:包括条件语句(if/else,case)、循环(while,for,each)和流程控制(break,next,redo)。 4. 函数:Ruby中的函数定义使用`def`关键字,可以有返回值,也可以无返回值。 三、面向对象编程 1. 类与...

    ruby语言入门教程

    - 控制结构:如条件语句(if/else, case/when)、循环(for, while, until, each)和流程控制(break, next, return)。 2. **Ruby的对象和类** - 对象:在Ruby中,一切皆为对象,每个变量都指向一个特定的对象。...

Global site tag (gtag.js) - Google Analytics