kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks
在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

posted on 2008-03-15 21:08 kenlistian 阅读(167) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。