From: Tanaka Akira Date: 2008-02-10T18:39:24+09:00 Subject: [ruby-dev:33684] Re: suggestion: PrettyPrint#group_with_breakable In article , "Yusuke ENDOH" writes: > PrettyPrint に group_with_breakable メソッドを追加することを提案します。 > > 現状の group メソッドは、Array の prettyprint や Scheme のソースコードの > ように最初の行と最後の行にカッコを連ねる形式にしか使えません。 とりあえず、使えないことはありません。 class Array def pretty_print(q) q.text '[' unless self.empty? q.group { q.nest(1) { q.breakable '' q.seplist(self, lambda { q.comma_breakable }) {|v| q.pp v } } q.breakable '' } end q.text ']' end end pp [[[(1..30).to_a]]] とすれば [ [ [ [ 1, 2, 3, ... 28, 29, 30 ] ] ] ] と出てきます。 使いかたの説明が不足しているのだとは思いますが、すいませんが 詳しい説明は元ネタの Wadler の論文を参照してください。 Philip Wadler, A prettier printer, March 1998, http://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#prettier というように内部をいじらなくてもこれは可能なので、少なくとも 内部をいじる実装は受け入れられません。 こういうインデント方式を支援すること自体は悪くないと思うので すが、その場合メソッド名にはこのインデント方式を想起させる名 前をつけたほうが良いと思います。group_with_breakable はあま りそういう感じがしません。 -- [田中 哲][たなか あきら][Tanaka Akira]