Rubyで、ブロックを引数にもつメソッドを再帰的に呼び出す場合、どのようにすれば良いでしょうか。
例えば以下のコードを考えています
ruby
1class Node 2 attr_reader :id, :name 3 attr_accessor :children 4 5 def initialize(id, name) 6 @id = id 7 @name = name 8 @children = [] 9 end 10 11 # selfを根とした木の配列を再帰的に作る 12 def subtree(prc) 13 children.flat_map {|ch| ch.subtree(prc) } + [prc.call(self)] 14 end 15 16end 17 18root = Node.new(0, 'root') 19ch_1 = Node.new(1, 'child_1') 20ch_2 = Node.new(2, 'child_2') 21 22# ノードを結合 23root.children << ch_1 24root.children << ch_2 25 26# procオブジェクトを渡す場合 27p root.subtree(proc {|n| n.id}) 28p root.subtree(proc {|n| n.name}) 29# [1, 2, 0] 30# ["child_1", "child_2", "root"] 31 32# ブロックを渡す場合, エラーになる 33# このように呼び出したい 34p root.subtree(&:id) 35p root.subtree(&:name)
まずは、root.subtree(proc {|n| n.id})
のようにprocオブジェクトを引数に渡して呼ぶことはできましたが、
目標はroot.subtree(&:id)
のように省略記法のブロックを渡して呼び出したいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/28 10:12