在ruby中,其闭包和块最为有趣和让习惯传统编程后感觉有些别扭,
闭包:理解为一段代码,能作为参数传递给其它方法。其实,从传统编程角度讲也就是传递一个函数指针的意味比较浓。
块: 相当是一个匿名函数。
在模式设计中,常常把类的共性部分抽离到一个父类,然后通过子类继承来实现。在ruby中,可以
采用闭包模式,把各异的处理部分(也可理解为函数指针)作为参数传给方法中处理。
有时:感觉就是无非一个函数指针传给另一个函数中调用而已。
如下测试例子
1 def method(&func)
2 func.call(self)
3 end
4
5
6 def func1
7 puts "func1 by call 1"
8 end
9
10 method(){ func1 }
11 method(){ puts "call function 2" }
在method中声明参数为 &func,有点想c++中的带指针模式。
在11行中,其就是一个整个块被传入。
下面看一个类中调用的闭包的例子。
1 class Button
2 def initialize(label)
3 puts label
4 end
5
6 end
7
8 class JukeboxButton < Button
9 def initialize(label, &action)
10 super(label)
11 @action = action
12 end
13
14 def buttonPressed
15 @action.call(self)
16 end
17 end
18
19 class SongList
20 def start
21 puts "press start"
22 end
23 def pause
24 puts "press pause"
25 end
26 end
27
28 songList = SongList.new
29 bStart = JukeboxButton.new("Start") { songList.start }
30 bStart.buttonPressed
31 bPause = JukeboxButton.new("Pause") { songList.pause }
32 bPause.buttonPressed