使用pp()實(shí)現(xiàn)Ruby輸出二維數(shù)組
Ruby語(yǔ)言中對(duì)于數(shù)組的處理方式較之其他編程語(yǔ)言來(lái)說(shuō)還是比較簡(jiǎn)便的。那么,我們就先來(lái)一起了解一下Ruby輸出二維數(shù)組的相關(guān)技巧。#t#
用Ruby的pp()函數(shù)可以以很漂亮的方式輸出數(shù)組。不過(guò)美中不足的是會(huì)將二維數(shù)組顯示在一行上。我們希望它能夠以每行一個(gè)子數(shù)組的方式進(jìn)行輸出。
其實(shí)PP是一個(gè)挺不錯(cuò)的用于輸出對(duì)象的框架(雖說(shuō)好像是小日本寫的)。要想實(shí)現(xiàn)上面Ruby輸出二維數(shù)組的效果,只需要在Array#pretty_print()函數(shù)的默認(rèn)實(shí)現(xiàn)中添加一行代碼就可以實(shí)現(xiàn)!代碼如下(文件名“pp_extension.rb”):
- # Outputs two-dimension
array like matrix- class Array
- def pretty_print(q)
- q.group(1, '[', ']') {
- q.seplist(self) {|v|
- q.current_group.break if v.is
_a?(Array) && !q.current_
group.first? # added by me- 7q.pp v
- }
- }
- end
- end
您一定以為我很了解PrettyPrint和PP的實(shí)現(xiàn)原理吧?其實(shí)不是的。我只是粗略的看了一下這兩個(gè)類的源代碼(它們?cè)贑:\ruby\lib\ruby\1.8\),然后猜測(cè)它的實(shí)現(xiàn)方法是用group()函數(shù)對(duì)對(duì)象中的信息進(jìn)行分組,然后遞歸調(diào)用pp()函數(shù)輸出每組信息。
之后我Copy了Array#pretty_print()函數(shù)的默認(rèn)實(shí)現(xiàn),嘗試著稍作修改而已。所以我也沒(méi)有辦法為您詳細(xì)剖析PP的Ruby輸出二維數(shù)組實(shí)現(xiàn)方法了,希望這篇文章能夠給您帶來(lái)一些靈感,起到拋磚引玉的作用。也許以后有時(shí)間我會(huì)仔細(xì)的看一下它們的源代碼的。
PS:用修改后的pp()輸出三維數(shù)組也可以的,您可以試一下。