diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/sample/list.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/sample/list.rb')
-rw-r--r-- | trunk/sample/list.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/trunk/sample/list.rb b/trunk/sample/list.rb new file mode 100644 index 0000000000..221f7edb16 --- /dev/null +++ b/trunk/sample/list.rb @@ -0,0 +1,80 @@ +# Linked list example +class MyElem + # object initializer called from Class#new + def initialize(item) + # @variables are instance variable, no declaration needed + @data = item + @succ = nil + end + + def data + @data + end + + def succ + @succ + end + + # the method invoked by ``obj.data = val'' + def succ=(new) + @succ = new + end +end + +class MyList + def add_to_list(obj) + elt = MyElem.new(obj) + if @head + @tail.succ = elt + else + @head = elt + end + @tail = elt + end + + def each + elt = @head + while elt + yield elt + elt = elt.succ + end + end + + # the method to convert object into string. + # redefining this will affect print. + def to_s + str = "<MyList:\n"; + for elt in self + # short form of ``str = str + elt.data.to_s + "\n"'' + str += elt.data.to_s + "\n" + end + str += ">" + str + end +end + +class Point + def initialize(x, y) + @x = x; @y = y + self + end + + def to_s + sprintf("%d@%d", @x, @y) + end +end + +# global variable name starts with `$'. +$list1 = MyList.new +$list1.add_to_list(10) +$list1.add_to_list(20) +$list1.add_to_list(Point.new(2, 3)) +$list1.add_to_list(Point.new(4, 5)) +$list2 = MyList.new +$list2.add_to_list(20) +$list2.add_to_list(Point.new(4, 5)) +$list2.add_to_list($list1) + +# parenthesises around method arguments can be ommitted unless ambiguous. +print "list1:\n", $list1, "\n" +print "list2:\n", $list2, "\n" |