Ruby函數(shù)指針概念詳解
Ruby語(yǔ)言中也存在被編程人員公認(rèn)為最難理解的指針。不過(guò)在這項(xiàng)新語(yǔ)言中指針又有什么新的特性呢。下面我們就來(lái)看看Ruby函數(shù)指針的一些相關(guān)概念介紹。#t#
本人目前正在重新學(xué)一遍Ruby語(yǔ)言,以期能達(dá)到一定的熟練程度??吹搅藟K的部分,想起了C、C++、C#中無(wú)比親切的函數(shù)指針。這東西在實(shí)現(xiàn)訪問(wèn)者模式時(shí)有很大用處。在《Programming Ruby》的HTML版中最后的部分有一節(jié)對(duì)訪問(wèn)者模式的實(shí)現(xiàn)方法的介紹。我還沒(méi)有看到那里。這里說(shuō)一下我的方法。
Ruby的塊功能只能外掛一段代碼。相比C語(yǔ)言家族的Ruby函數(shù)指針不是那么靈活。核心庫(kù)的Proc類(lèi)可以將塊代碼封裝起來(lái)。利用它,可以將多個(gè)塊一并作為參數(shù)傳給調(diào)用函數(shù)。下面的代碼演示了一個(gè)具體的過(guò)程。visit_node方法作為一個(gè)帶兩個(gè)參數(shù)的函數(shù)和proc方法一起,被傳給traverse調(diào)用。注意最后一行是如何將visit_node和proc方法封裝成Proc對(duì)象的。
- def traverse(visit_proc, proc)
- i = 0
- while (i < 10)
- visit_proc.call(i, i + 1)
- proc.call
- i += 1
- end
- end
- def visit_node(i, j)
- print("#{i}, #{j}")
- puts
- end
- def print_sharp
- puts("###################")
- end
- traverse(Proc.new { |i, j|
visit_node(i, j) }, Proc.new
{ print_sharp })
這樣就可以達(dá)到類(lèi)似于Ruby函數(shù)指針的效果了。有點(diǎn)類(lèi)似于C#中的代理。


















