Saturday, 8 November 2014

Accessing instance variable in ruby outside a class

class Basics
  @var="instance variable 1"
  @var1=0
  def initialize()
    @var1=1
  end
  def showMe()
    @var="instance variable is initialized here.."
  end
end

obj1= Basics.new
puts 'accessing instance variable b4 initializing it..'
puts "is nil ?"+ obj1.instance_variable_get(:@var).nil?.to_s
c= obj1.showMe()
puts "is instance var initialized: " + obj1.instance_variable_get(:@var).to_s
puts 'accessing instance variable: ' + obj1.instance_variable_get(:@var1).to_s

# You should not make this the default way you access instance variables as it violates encapsulation
# A better way is to define an accessor:
puts "+++++++++++++++++++++++++++++++++++++++++++"
class Hello
  @var1
  @var2=''
 def method1
   @hello = "venu"
   @var1="val1"
   @var2="val2"
 end
 attr_reader :hello
 attr_reader :var2
end

h = Hello.new
puts "check for @hello value b4 initialization.."
p h.hello #nil
p h.method1         #def/method return last evaluated value
p h.hello #"venu"   #accessing instance variable better way
puts h.var2         #accessing instance variable better way


Output:
accessing instance variable b4 initializing it..
is nil ?true
is instance var initialized: instance variable is initialized here..
accessing instance variable: 1
+++++++++++++++++++++++++++++++++++++++++++
check for @hello value b4 initialization..
nil
"val2"
"venu"
val2
++++++++++++++++++++++++++++++++++++++++=

http://stackoverflow.com/questions/12122736/access-instance-variable-from-outside-the-class

No comments:

Post a Comment