=begin
yield的意思其实很简单,就是暂停代码的运行,将yield后面的参数传递给block,block根据传递来的参数运行
当block返回值得时候,值就是yield的返回值,yield返回后继续运行.
代码块(Blocks)是指一块代码,用大括号({})或者do…end来标明起始和结束,代码块只能跟在方法调用后边。
yield语句:在方法内部使用yield语句来占位,当方法执行到yield时,实际执行的是调用方法时跟在后边的的代码块。
|x|:变量用一对’|'包裹,在代码块中使用,用于接受yield传递的参数。yield后跟的参数会传递给代码块中用| |标志的变量。
=end
def m
count=1
while count<10
count+=1
if count%3==0
yield count
end
end
end
def meth
m {|count| yield count}
end
# Call Methods
meth {|count| puts count}
#占位符,准确的说是可以带家伙的占位符,那么这个带的家伙自然是后续调用代码中的所需要的东西了,
#实例二 定义find
def find(dir)
#获得dir目录下的文件名列表;对每个文件名,用yield来处理(至于怎么处理,还不知道,占个位置先^_^)
Dir.entries(dir).each {|f| yield f}
end
#使用find
find(".") do |f| #block开始
puts f #用输出文件名这个语句,真正实现了yield的处理(也可以用任何其他语句)
end #block结束
输出的结果:
3
6
9
.
..
.project
test_1.rb
yield.rb
参考的文章:
http://flyingsnail.blog.51cto.com/5341669/1088018