summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorgreybird <greybird91@gmail.com>2013-08-07 11:20:20 +0400
committergreybird <greybird91@gmail.com>2013-08-07 11:20:20 +0400
commit80c71ef1c849d4294e13c3dbfce6fad66a79e99a (patch)
treeed4510ea7b68d0b8e0a043de64dac1ffd71243d6
parentf5023cc9b35be5d1986a76ce1d6f44979a766afb (diff)
Ruby. Difference between class instance variables and class variables
-rw-r--r--ruby.html.markdown46
1 files changed, 46 insertions, 0 deletions
diff --git a/ruby.html.markdown b/ruby.html.markdown
index a3bcbbd5..99817982 100644
--- a/ruby.html.markdown
+++ b/ruby.html.markdown
@@ -325,4 +325,50 @@ dwight.name #=> "Dwight K. Schrute"
# Call the class method
Human.say("Hi") #=> "Hi"
+# Class also is object in ruby. So class can have instance variables.
+# Class variable is shared among the class and all of its descendants.
+
+# base class
+class Human
+ @@foo = 0
+
+ def self.foo
+ @@foo
+ end
+
+ def self.foo=(value)
+ @@foo = value
+ end
+end
+
+# derived class
+class Worker < Human
+end
+
+Human.foo # 0
+Worker.foo # 0
+
+Human.foo = 2 # 2
+Worker.foo # 2
+
+# Class instance variable is not shared by the class's descendants.
+
+class Human
+ @bar = 0
+
+ def self.bar
+ @bar
+ end
+
+ def self.bar=(value)
+ @bar = value
+ end
+end
+
+class Doctor < Human
+end
+
+Human.bar # 0
+Doctor.bar # nil
+
```