使用pp()實現Ruby輸出二維數組
Ruby語言中對于數組的處理方式較之其他編程語言來說還是比較簡便的。那么,我們就先來一起了解一下Ruby輸出二維數組的相關技巧。#t#
用Ruby的pp()函數可以以很漂亮的方式輸出數組。不過美中不足的是會將二維數組顯示在一行上。我們希望它能夠以每行一個子數組的方式進行輸出。
其實PP是一個挺不錯的用于輸出對象的框架(雖說好像是小日本寫的)。要想實現上面Ruby輸出二維數組的效果,只需要在Array#pretty_print()函數的默認實現中添加一行代碼就可以實現!代碼如下(文件名“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的實現原理吧?其實不是的。我只是粗略的看了一下這兩個類的源代碼(它們在C:\ruby\lib\ruby\1.8\),然后猜測它的實現方法是用group()函數對對象中的信息進行分組,然后遞歸調用pp()函數輸出每組信息。
之后我Copy了Array#pretty_print()函數的默認實現,嘗試著稍作修改而已。所以我也沒有辦法為您詳細剖析PP的Ruby輸出二維數組實現方法了,希望這篇文章能夠給您帶來一些靈感,起到拋磚引玉的作用。也許以后有時間我會仔細的看一下它們的源代碼的。
PS:用修改后的pp()輸出三維數組也可以的,您可以試一下。