summaryrefslogtreecommitdiff
path: root/doc/syntax/modules_and_classes.rdoc
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-05 20:35:30 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-05 20:35:30 +0000
commitac67a2b6d45d2ab443517110674d240bd1ee8ed6 (patch)
tree8e94e522be702ebca7e4c150abb51263990b0c41 /doc/syntax/modules_and_classes.rdoc
parent902a36c1f6157385fc8cd914f3c8824017efbfeb (diff)
* doc/syntax/modules_and_classes.rdoc: Added singleton classes
documentation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'doc/syntax/modules_and_classes.rdoc')
-rw-r--r--doc/syntax/modules_and_classes.rdoc45
1 files changed, 45 insertions, 0 deletions
diff --git a/doc/syntax/modules_and_classes.rdoc b/doc/syntax/modules_and_classes.rdoc
index cca9dc2563..65bd31bf7d 100644
--- a/doc/syntax/modules_and_classes.rdoc
+++ b/doc/syntax/modules_and_classes.rdoc
@@ -291,3 +291,48 @@ provide them manually like <code>super(2)</code>.
+super+ may be called as many times as you like in the subclass method.
+= Singleton Classes
+
+The singleton class (also known as the metaclass or eigenclass) of an object is
+a class that holds methods for only that instance. You can access the
+singleton class of an object using <code>class << object</code> like this:
+
+ class C
+ end
+
+ class << C
+ # self is the singleton class here
+ end
+
+Most frequently you'll see the singleton class accessed like this:
+
+ class C
+ class << self
+ # ...
+ end
+ end
+
+This allows definition of methods and attributes on a class (or module) without
+needing to write <code>def self.my_method</code>.
+
+Since you can open the singleton class of any object this means that this code
+block:
+
+ o = Object.new
+
+ def o.my_method
+ 1 + 1
+ end
+
+is equivalent to this code block:
+
+ o = Object.new
+
+ class << o
+ def my_method
+ 1 + 1
+ end
+ end
+
+Both objects with have a +my_method+ that returns +2+.
+