From: Shin-ichiro HARA Date: 2001-03-02T06:37:12+09:00 Subject: [ruby-list:28405] Re: 【要望】 EmacsLisp みたいなフック 原です。 >ごとけんです きれいなコードですね。 > class Visitor > def initialize > yield(self) > end ここでめまいがしそう。(^^ 「複数のブロックを渡したければ、Proc 化して渡せ」という事を示すには class BinTree def initialize(data, left = nil, right = nil) @data, @left, @right = data, left, right end def traverse(before_proc, middle_proc, after_proc) before_proc.call(@data) if before_proc @left.traverse(before_proc, middle_proc, after_proc) if @left middle_proc.call(@data) if middle_proc @right.traverse(before_proc, middle_proc, after_proc) if @right after_proc.call(@data) if after_proc end end # example def BinTree(data, left = nil, right = nil) BinTree.new(data, left, right) end t = BinTree("red", BinTree("blue", BinTree("yellow"), BinTree("pink")), BinTree("green")) indent = " "*8 lv = 0 t.traverse(proc{ |i| print ",\n" if lv > 0 print indent*lv, "BinTree(#{i.inspect}" lv += 1 }, nil, proc{ |i| print ")" lv -= 1 print "\n" if lv.zero?}) で十分では。