`
Hooopo
  • 浏览: 336033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

yield next break return

    博客分类:
  • Ruby
阅读更多
irb(main):056:0> def test(i)
irb(main):057:1> puts "Before"
irb(main):058:1> yield i
irb(main):059:1> puts "After"
irb(main):060:1> end



irb(main):067:0> test(1){|i| next true if i > 2;puts "code"}
Before
code
After
=> nil
irb(main):068:0> test(3){|i| next true if i > 2;puts "code"}
Before
After
=> nil
irb(main):069:0> test(3){|i| break true if i > 2;puts "code"}
Before
=> true
irb(main):070:0> test(1){|i| break true if i > 2;puts "code"}
Before
code
After
=> nil
irb(main):071:0> test(1){|i| return true if i > 2;puts "code"}
Before
code
After
=> nil
irb(main):072:0> test(3){|i| return true if i > 2;puts "code"}
Before
LocalJumpError: unexpected return
        from (irb):72
        from (irb):58:in `test'
        from (irb):72
        from :0

分享到:
评论
1 楼 Hooopo 2009-06-06  
irb(main):085:0> test(1) do |i|
irb(main):086:1*   catch(:done) do
irb(main):087:2*     throw(:done) if i > 2
irb(main):088:2>     puts "a lot of code here"
irb(main):089:2>   end
irb(main):090:1> end
Before
a lot of code here
After
=> nil
irb(main):091:0> test(3) do |i|
irb(main):092:1*   catch(:done) do
irb(main):093:2*     throw(:done) if i > 2
irb(main):094:2>     puts "a lot of code here"
irb(main):095:2>   end
irb(main):096:1> end
Before
After
=> nil

相关推荐

    JavaScript中yield实用简洁实现方式

    然而,为了实现更复杂的功能,如在迭代过程中中断或继续(类似于C#的`yield break`和`yield continue`),作者提出了使用异常来模拟这一行为的解决方案。这个方法虽然不完美,但能解决一些基本的需求: ```...

    在Node.js中用法Javascript Generators详解_.docx

    一旦 `next()` 被调用,函数开始执行直到遇到 `yield` 或 `return`。 Generator 函数可以包含多个 `yield` 表达式,每次调用 `next()` 时,函数会从上一次暂停的位置继续执行,直到遇到下一个 `yield`。例如: ```...

    Python函数式编程指南(四):生成器详解

    - **第一次调用** `next(generator)` 会开始执行生成器函数直到遇到第一个`yield`语句,并返回该语句的值,这里是`0`。 - **后续调用** `next()` 方法将继续从上次停止的地方执行,直到遇到下一个`yield`语句并返回...

    python yield和Generator函数用法详解

    每次调用`next()`或在for循环中迭代时,函数会从上次暂停的地方继续执行,而不是重新从头开始。 例如,要获取小于100的所有素数,我们可以这样做: ```python for prime in generate_primes(): if prime print...

    详解Python3中yield生成器的用法

    #### 七、yield与return的区别 在生成器函数中,`return` 语句可以用来提前结束生成器。一旦执行了 `return`,生成器就会被关闭。与之相对的是,`yield` 语句可以返回一个值,但不会结束生成器,而是暂停执行,等待...

    ruby基础教程(第四版)第21章 Proc类1

    - **`break`和`next`**:`break`命令用于从迭代器中提前退出,并返回一个值给调用者。`next`则用于中断一次块的执行,但不返回任何值,而是继续下一次迭代。 - **`to_proc`方法**:某些对象,如Symbol,具有`to_...

    Python使用迭代器捕获Generator返回值的方法

    生成器通过`yield`语句来产生值,并且在每次调用`next()`时恢复其状态,直到达到`return`语句或执行完毕。然而,`return`语句的返回值并不会像普通函数那样直接返回,而是通过抛出`StopIteration`异常来传递。下面...

    第10章.pptx

    生成器使用`yield`关键字替代了`return`,可以在函数执行过程中保存中间状态。 **示例代码:** ```python list01 = [2, 3, 19, 34, 12] def generator(alist): for item in alist: if item % 2 == 0: yield ...

    python3函数

    2. **迭代器**:实现了`__iter__`和`__next__`方法的对象,可以用在`for`循环中。生成器自动是迭代器,但其他容器类如列表、字典也可以通过`iter()`函数变成迭代器。 五、闭包与装饰器 1. **闭包**:当一个内嵌函数...

    python 写一个生成器(generator)生成一个杨辉三角--极简主义(csdn)————程序.pdf

    yield list # 将当前行的列表作为生成器的值 list.append(0) # 在当前行末尾添加一个0,用于计算下一行的起始值 list = [list[k] + list[k - 1] for k in range(i + 2)] # 使用列表生成式计算新行的每个元素 ...

    javascript基本语法_.docx

    return 语句用于返回表达式的值,yield 语句扔出一个表达式,并且中断函数执行直到下一次调用 next。 对象 JavaScript 的一个重要功能就是面对对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复...

    async-generator-example:用CodeSandbox创建

    == document.documentElement.offsetHeight) return; if (!cursor) { cursor = gen.next(); } else if (!cursor.done) { const { value } = cursor; // 在这里处理新加载的数据 displayData(value); ...

    Python进阶

    2. **迭代器(Iterator)**: 可以使用`next()`函数逐个访问元素的对象。 3. **迭代(Iteration)**: 通过迭代器访问可迭代对象的过程。 4. **生成器(Generators)**: 特殊类型的迭代器,通过`yield`语句生成值。 **示例...

    PHP生成器(generator)和协程的实现方法详解

    它定义了四个核心方法:`current()`、`key()`、`next()`、`rewind()`以及`valid()`。这些方法允许我们以一致的方式访问和遍历对象内部的数据,而无需暴露对象的具体实现细节。 下面是一个简单的自定义迭代器`Xrange...

    发电机

    生成器的工作原理是通过使用`yield`关键字来替代传统函数中的`return`。当函数遇到`yield`语句时,它会暂停执行,保存当前的所有状态,并返回`yield`后面的值。下次调用该函数时,它将从上次暂停的地方继续,而不是...

    Python 中迭代器与生成器实例详解

    break print(line, end='') except StopIteration: pass # 测试案例 items = [1, 2, 3] it = iter(items) print(next(it)) # 输出 1 print(next(it)) # 输出 2 print(next(it)) # 输出 3 ``` #### 三、代理...

    python程序设计ppt(二十讲)

    - break、continue语句 第四讲:函数 - 定义函数:def关键字 - 参数传递:位置参数、关键字参数、默认值 - 无返回值函数与return语句 第五讲:模块与包 - 导入模块:import、from...import - Python标准库介绍 - ...

    Python 2.4 Quick Reference Card

    - `yield`, `break` #### 三、内置函数与类型 **内置函数** - **常见函数**: - `abs()`, `divmod()`, `input()`, `open()`, `staticmethod()` - `all()`, `enumerate()`, `int()`, `ord()`, `str()` - `any()`...

    Python Interview

    break # 定义生成器函数 def simple_generator(): yield 1 yield 2 yield 3 # 使用生成器 for value in simple_generator(): print(value) ``` #### 10. *args 和 **kwargs - `*args` 允许我们将任意数量的...

Global site tag (gtag.js) - Google Analytics