博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enumerator yielder.yield 与 Proc.yield 区别
阅读量:5171 次
发布时间:2019-06-13

本文共 1295 字,大约阅读时间需要 4 分钟。

最近看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

你可能感兴趣的文章
Real-Time Rendering 笔记
查看>>
多路复用
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
有关快速幂取模
查看>>
NOI2018垫底记
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>