annotate 1-Ruby/tree.rb @ 21:7e212cc7ec24

Add default Tree code from book's source code
author IBBoard <dev@ibboard.co.uk>
date Sat, 07 Jan 2017 20:36:33 +0000
parents
children e020410896ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 #---
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 # Excerpted from "Seven Languages in Seven Weeks",
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 # published by The Pragmatic Bookshelf.
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 # Copyrights apply to this code. It may not be used to create training material,
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 # courses, books, articles, and the like. Contact us if you are in doubt.
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 # We make no guarantees that this code is fit for any purpose.
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 # Visit http://www.pragmaticprogrammer.com/titles/btlang for more book information.
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 #---
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 class Tree
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 attr_accessor :children, :node_name
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 def initialize(name, children=[])
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 @children = children
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 @node_name = name
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 end
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 def visit_all(&block)
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 visit &block
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 children.each {|c| c.visit_all &block}
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 end
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 def visit(&block)
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 block.call self
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 end
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 end
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27 ruby_tree = Tree.new( "Ruby",
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 [Tree.new("Reia"),
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 Tree.new("MacRuby")] )
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
30
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
31 puts "Visiting a node"
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
32 ruby_tree.visit {|node| puts node.node_name}
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
33 puts
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
34
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
35 puts "visiting entire tree"
7e212cc7ec24 Add default Tree code from book's source code
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
36 ruby_tree.visit_all {|node| puts node.node_name}