という本の2日目の試してみようで作ったソースでも
メモ程度に置いておきます。
後になってみたときに、ひどいコードを書いていたなぁ~
と思えるようにw
class Tree
attr_accessor :tree, :node_name
def initialize(tree)
tree = tree.to_a.first if tree.is_a?(Hash)
@tree = tree
@node_name = @tree[0]
end
def visit_all(&block)
visit &block
visit_all_child(@tree , 0)
end
def visit(&block)
block.call self
end
def visit_all_child(children , nest)
children[1].map do |child|
for i in 0..nest do
print " "
end
printf("%s\n",child[0])
if child[1] != []
visit_all_child(child, nest + 1)
end
end
end
end
tree = {
'grandpa' => {
'dad' => {
'child 1' => [],
'child 2' => []
},
'uncle' => {
'child3' => [],
'child4' => []
},
'newDad' => {
'child5' => [],
'child6' => {
'child6_1' => [],
'child6_2' => []
}
}
}
}
ruby_tree = Tree.new(tree)
puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}
puts "Visiting entire node"
ruby_tree.visit_all {|node| puts node.node_name}
実行結果
c:\code>ruby 2-2.rb
Visiting a node
grandpa
Visiting entire node
grandpa
dad
child 1
child 2
uncle
child3
child4
newDad
child5
child6
child6_1
child6_2
段々にしたかったので作ったら、なんか微妙な感じになりました。
0 件のコメント:
コメントを投稿