* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / sample / list.rb
blob221f7edb1660c2b6d6fdc176071cb959a4346d76
1 # Linked list example
2 class MyElem
3   # object initializer called from Class#new
4   def initialize(item)
5     # @variables are instance variable, no declaration needed
6     @data = item
7     @succ = nil
8   end
10   def data
11     @data
12   end
14   def succ
15     @succ
16   end
18   # the method invoked by ``obj.data = val''
19   def succ=(new)
20     @succ = new
21   end
22 end
24 class MyList
25   def add_to_list(obj)
26     elt = MyElem.new(obj)
27     if @head
28       @tail.succ = elt
29     else
30       @head = elt
31     end
32     @tail = elt
33   end
35   def each
36     elt = @head
37     while elt
38       yield elt
39       elt = elt.succ
40     end
41   end
43   # the method to convert object into string.
44   # redefining this will affect print.
45   def to_s
46     str = "<MyList:\n";
47     for elt in self
48       # short form of ``str = str + elt.data.to_s + "\n"''
49       str += elt.data.to_s + "\n"
50     end
51     str += ">"
52     str
53   end
54 end
56 class Point
57   def initialize(x, y)
58     @x = x; @y = y
59     self
60   end
62   def to_s
63     sprintf("%d@%d", @x, @y)
64   end
65 end
67 # global variable name starts with `$'.
68 $list1 = MyList.new
69 $list1.add_to_list(10)
70 $list1.add_to_list(20)
71 $list1.add_to_list(Point.new(2, 3))
72 $list1.add_to_list(Point.new(4, 5))
73 $list2 = MyList.new
74 $list2.add_to_list(20)
75 $list2.add_to_list(Point.new(4, 5))
76 $list2.add_to_list($list1)
78 # parenthesises around method arguments can be ommitted unless ambiguous.
79 print "list1:\n", $list1, "\n"
80 print "list2:\n", $list2, "\n"