Skip to content

Instantly share code, notes, and snippets.

@qichunren
Created May 6, 2014 09:39
Show Gist options
  • Save qichunren/a9221e3cd3392ae26353 to your computer and use it in GitHub Desktop.
Save qichunren/a9221e3cd3392ae26353 to your computer and use it in GitHub Desktop.
class RubyClassInstanceVariableTest
def self.attr1
@attr1 = "*att1*"
end
def self.test1
attr1
puts "Try directly print @attr1: #{@attr1}"
end
def self.test2
puts "Try print @attr1 via attr1 method: #{attr1}"
end
end
class ChildRubyClassInstanceVariableTest < RubyClassInstanceVariableTest
def self.test3
puts "If I can see attr1 from parent? #{@attr1}"
end
end
puts "Testcase 1:"
RubyClassInstanceVariableTest.test1
RubyClassInstanceVariableTest.test2
puts "instance_variable_get: #{RubyClassInstanceVariableTest.instance_variable_get(:@attr1)}"
puts "\nIn SubClass:"
ChildRubyClassInstanceVariableTest.test1
ChildRubyClassInstanceVariableTest.test2
ChildRubyClassInstanceVariableTest.test3
puts "child instance_variable_get: #{ChildRubyClassInstanceVariableTest.instance_variable_get(:@attr1)}"
## @@variable
puts "\nTestcase 2:"
class RubyClassInstanceVariableTest2
def self.attr1
@@attr1 = "[attr1]"
end
def self.test1
attr1
puts "Try directly print @@attr1: #{@@attr1}"
end
def self.test2
puts "Try print @attr1 via attr1 method: #{attr1}"
end
end
class ChildRubyClassInstanceVariableTest2 < RubyClassInstanceVariableTest2
def self.test3
puts "If I can see attr1 from parent? #{@@attr1}"
end
end
RubyClassInstanceVariableTest2.test1
RubyClassInstanceVariableTest2.test2
puts "class_variable_get: #{RubyClassInstanceVariableTest2.class_variable_get(:@@attr1)}"
puts "\nIn SubClass:"
ChildRubyClassInstanceVariableTest2.test1
ChildRubyClassInstanceVariableTest2.test2
ChildRubyClassInstanceVariableTest2.test3
puts "child class_variable_get: #{ChildRubyClassInstanceVariableTest2.class_variable_get(:@@attr1)}"
@qichunren
Copy link
Author

Result:

Testcase 1:
Try directly print @attr1: *att1*
Try print @attr1 via attr1 method: *att1*
instance_variable_get: *att1*

In SubClass:
Try directly print @attr1: *att1*
Try print @attr1 via attr1 method: *att1*
If I can see attr1 from parent? *att1*
child instance_variable_get: *att1*

Testcase 2:
Try directly print @@attr1: [attr1]
Try print @attr1 via attr1 method: [attr1]
class_variable_get: [attr1]

In SubClass:
Try directly print @@attr1: [attr1]
Try print @attr1 via attr1 method: [attr1]
If I can see attr1 from parent? [attr1]
child class_variable_get: [attr1]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment