最近看ruby cookbook遇到这个用法,google一下,这里原文解释

http://stackoverflow.com/questions/18865860/enumerator-yielder-yield-vs-proc-yield

Enumerator yielder.yield VS Proc.yield

The yield statement has no receiver. Inside a method it means "Run the block right now". An error occurs if no block is attached. It is not always given an argument, because sometimes you just want to run the block.

就是说。有时候未必会传递一个block。仅仅是想运行一个block。但是未必会传递这个block,这时yielder.yield派上用场

例如

def foo
yield :bar
end
foo # LocalJumpError
foo { |x| puts x } # bar

Enumerator::Yielder
For a yielder, yield is almost always given an argument. That's because it means the same as << which is "The next time someone calls next on me, give them this value".

yield总是会得到一个参数, 因为<<和yield一样意思,下一次在我身上调用next方法,返回这个值

Enumerator.new { |yielder| yielder.yield 3 }.next # 3 #返回3
Enumerator.new { |yielder| yielder << 3 }.next # same thing

Proc
Procs and lambdas are basically functions. yield here means the same thing as call, which "Just call the function". You can give it an argument or not, depending on how the proc was defined. Nothing fancy here.

procs和lambda类似函数,yield和call作用一样,调用这个函数 你可以传递或者不传递参数,这个传不传按照proc怎么定义来看,
proc { |x| puts x }.yield(:bar) # bar
proc { |x| puts.x }.call(:bar) # same thing

转载于:https://www.cnblogs.com/or2-/p/5116524.html

Enumerator yielder.yield 与 Proc.yield 区别相关推荐

  1. yield next和yield* next的区别

    yield next和yield* next之间到底有什么区别?为什么需要yield* next?经常会有人提出这个问题.虽然我们在代码中会尽量避免使用yield* next以减少新用户的疑惑,但还是 ...

  2. python yield from_python中yield的用法以及和yield from的区别

    看了大佬的博客很快就懂了. 由于最近接触了酷q机器人,搭建好了环境,配合NoneBot可以通过python代码自己写机器人功能. NoneBot是基于asyncio的,所以先通过yield来学习一点p ...

  3. java线程中yield()和join()的区别

    多线程在面试中是非常受欢饮的题目,我个人认为我们很少有机会能够真正的用到复杂的多线程(我在7年前使用过一次),熟悉这些概念能够增加你的信心,先前,我已经讨论了一个相似的问题,wait()和sleep( ...

  4. yield和return的区别-- 超详细

    首先比较下return 与 yield的区别: return:在程序函数中返回某个值,返回之后函数不在继续执行,彻底结束. yield: 带有yield的函数是一个迭代器,函数返回某个值时,会停留在某 ...

  5. python3 yield和iter的区别_Python中的yield关键字

    Yield? 总的来说,yield关键字和return关键字有相似之处,但其工作机制却大相径庭.想要完整地理解yield的工作机制,我们首先需要明白什么是generator.而为了明白什么是gener ...

  6. php yield 导出文件,PHP yield 读取大文件

    今天来优化下读取大文件,在 PHP 读取大文件的时候,经常会出现内存不足的情况,如果文件过大的话,没法一次读取完,今天采用 yield 来实现大文件的读取.yield生成器是php5.5之后出现的,y ...

  7. python yield from yield_python yield和yield from用法总结详解 python yield和yield from用法总结...

    #!/usr/bin/env python # -*- coding: utf-8 -*-from inspect import isgeneratorfunction def fab(max): n ...

  8. python yield from_简述 yield 和 yield from

    yield 函数可以看成是一堆指令的集合.在函数中加入yield可以把一个函数变成一个generator,虽然调用的方式不一样了,但是其实现的功能和原来的函数基本是一样的. 而yield在这其中的作用 ...

  9. java thread yield()_Java Thread yield()方法

    Java Thread yield()方法 java.lang.Thread.yield() 方法使当前执行的线程对象来暂停并允许其他线程执行. 1 语法 public static void yie ...

  10. Java中sleep,wait,yield,join的区别

    sleep() wait() yield() join()用法与区别 1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放"锁标志".不推荐使用. slee ...

最新文章

  1. CoolPad backdoor CoolReaper
  2. 存储基础知识二 主要协议SCSI、FC、iSCSI
  3. Struts1.2+Spring2.5+Hibernate3.2框架搭建(十五)
  4. Oracle HA 之 OGG部署流水
  5. 【K210】【MaixPy】三、Maix Dock入门之LCD的使用(播放BadApple)
  6. rust怎么调整夜晚亮度_买手机时LCD屏和OLED屏怎么选?终于明白了!
  7. 【Linux】du命令用法详解
  8. UVW 在C#中的代码实现
  9. 打印机 树莓派安装cpus_raspberry树莓派安装CUPS实现打印服务器共享HP P1007打印机...
  10. 关于电商行业网络安全解决方案
  11. 猫怎么设置虚拟服务器,光纤猫设置虚拟服务器
  12. 银行电话营销数据分析
  13. ZCMU 1919 :kirito's 星爆气流斩 (多重背包问题)
  14. 知乎热议 | 何恺明 新作 如何?
  15. LaTeX Warnings: Unused global option(s)
  16. 如何做好IT战略规划与IT咨询!
  17. excel2016 android,Excel2016试用心得。
  18. MIKE 21 教程 2.1水动力模型介绍
  19. 如何将string的日期转换为date的通用方法,包含正则表达处理(一)
  20. java/php/net/python音乐爱好者论坛设计

热门文章

  1. MYSQL 存储过程和函数 案例 例子
  2. kafka生产者集群和分区,消费者轮询接收
  3. 阶段3 2.Spring_07.银行转账案例_7 代理的分析
  4. js实现表格配对小游戏
  5. MDK 中 [WEAK] 的作用
  6. ICMP(网际控制报文协议)
  7. 【VS开发】Windows平台下Makefile学习笔记
  8. cf446C DZY Loves Fibonacci Numbers
  9. 谈谈我心目中理想的牛人
  10. 焦点图,带数字显示,支持常见浏览器