Mercurial > repos > other > SevenLanguagesInSevenWeeks
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 |
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} |