home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / rbemx144.zip / ruby-1.4.4 / sample / list.rb < prev    next >
Text File  |  1999-08-13  |  1KB  |  81 lines

  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
  9.  
  10.   def data
  11.     @data
  12.   end
  13.  
  14.   def succ
  15.     @succ
  16.   end
  17.  
  18.   # the method invoked by ``obj.data = val''
  19.   def succ=(new)
  20.     @succ = new
  21.   end
  22. end
  23.  
  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
  34.  
  35.   def each
  36.     elt = @head
  37.     while elt
  38.       yield elt
  39.       elt = elt.succ
  40.     end
  41.   end
  42.  
  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
  55.  
  56. class Point
  57.   def initialize(x, y)
  58.     @x = x; @y = y
  59.     self
  60.   end
  61.  
  62.   def to_s
  63.     sprintf("%d@%d", @x, @y)
  64.   end
  65. end
  66.  
  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)
  77.  
  78. # parenthesises around method arguments can be ommitted unless ambiguous.
  79. print "list1:\n", $list1, "\n"
  80. print "list2:\n", $list2, "\n"
  81.