1、用于迭代器之后
Ruby的迭代器与其他语言的迭代器很不相同,它的迭代器一般都是函数,如:
def three_times
yield
yield
yield
end
使用实例: three_times { puts “hello”}
Ruby内置了一些迭代器如find,each,collect,inject等
3.times { puts “hello” }
[‘1’,’2’,’3’].find {|item| item == ‘1’}
2、事务block
使用block可以形成事务机制,使得事务能够根据一定的步骤执行,如:
class File
def File.open_and_process(*args)
f = File.open(*args)
yield f
f.close()
end
end
上面这段代码是一个打开文件–> 操作 –> 关闭文件的事务
File.open_and_process("testfile","r") do |file|
while line = file.gets
puts line
end
end
3、Block作为闭包
class Button
def initialize(lable,&action)
super(label)
@action = action
end
def button_pressed
@action.call(self)
end
end
start_button = Button.new(“Start”) { function1 }
pause_button = Button.new(“Pause”) { function2}
在定义方法时,在最后一个参数前加一个&,那么当调用该方法时,Ruby会寻找一个block。block将会
初始化为一个Proc的对象,此时就可以使用Proc#call方法调用相应的block。
原文地址:http://blog.csdn.net/u010640235/article/details/44997793