Skip to content

Instantly share code, notes, and snippets.

@amolpujari
Last active April 12, 2017 03:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amolpujari/5d3ed70a1933b6a38cbdd7c3448325b5 to your computer and use it in GitHub Desktop.
Save amolpujari/5d3ed70a1933b6a38cbdd7c3448325b5 to your computer and use it in GitHub Desktop.
In Ruby class variables are denoted by `@@`, and instance variables are denoted by `@`
Instance variables
- are private to the class instance, cannot be accessed outside class unless shared
- they cannot be accessed outside class instance methods
- they get inherited
Class variables
- are private to the class instance, cannot be accessed outside class unless shared
- they cannot be accessed outside class instance methods
- they get inherited
- *they are be shared across all the subclasses and self instances all subclasses instances*
Examples:
class A
def self.items
@@cvar ||= []
end
def items
@@cvar ||= []
end
def private_items
@ivar ||= []
end
end
class B < A
end
irb(main):018:0* A.items << :mango
=> [:mango]
irb(main):019:0> instance1 = A.new
=> #<A:0x13deb50e>
irb(main):020:0> instance1.items
=> [:mango]
irb(main):021:0>
irb(main):022:0* instance2 = B.new
=> #<B:0x239963d8>
irb(main):023:0> puts instance2.items
mango
=> nil
irb(main):024:0>
irb(main):025:0* instance2.items << :watermelon
=> [:mango, :watermelon]
irb(main):026:0> puts A.items
mango
watermelon
=> nil
irb(main):027:0> puts B.items
mango
watermelon
=> nil
irb(main):028:0> puts instance1.items
mango
watermelon
=> nil
irb(main):029:0> puts instance2.items
mango
watermelon
=> nil
irb(main):030:0>
irb(main):031:0* instance1.private_items << :rose
=> [:rose]
irb(main):032:0> instance2.private_items << :daisy
=> [:daisy]
irb(main):033:0>
irb(main):034:0* puts instance1.private_items
rose
=> nil
irb(main):035:0> puts instance2.private_items
daisy
=> nil
irb(main):036:0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment