赞 | 6 |
VIP | 356 |
好人卡 | 3 |
积分 | 2 |
经验 | 297560 |
最后登录 | 2022-1-18 |
在线时间 | 509 小时 |
Lv1.梦旅人 有事烧纸
- 梦石
- 0
- 星屑
- 154
- 在线时间
- 509 小时
- 注册时间
- 2005-10-22
- 帖子
- 6982
|
4楼
楼主 |
发表于 2006-12-20 17:17:19
|
只看该作者
以下引用美兽于2006-12-20 8:58:02的发言:
yield 是什么意思,上次叶子说过一回,但似乎我理解上有出入,RGSS里这个东西一直没完全理解.
其实在ruby里,yield就是实现迭带器的,比如Array里的each什么都是通过这个来实现的。
首先,yield必须和块连用,块就是跟在方法后面的{},可以暂时理解为参数也行。比如:
def test
yield
yield
end
test{p 'test'}
会p两次 test。现在来解释下这个方法的运行:首先调用方法,然后接着到后面的{},但这里不会运行,而直接进入方法里面,也就是执行yield,而yield就是使先前的块执行,也就是{}里的内容,所以p了两次test。
然后这种:
def test
yield(1)
end
test{|i| p i}
yield带参数的,执行的时候就会把参数传递给||中间这个变量,然后执行块。
所以,现在我们来定义Array的each方法就是这样:
def each
for i in 0...size
yield(self)
end
end
最后,block_given?这个可以判断方式是否带块,这样使用:
def test
if block_given?
yield
p 'block'
else
p 'noblock'
end
end
test{}
test |
|