Access instance variable from outside the class
instance-variables, ruby
Solution
Yes, you can use `instance_variable_get` like this:
class Hello
def method1
@hello = "pavan"
end
end
h = Hello.new
p h.instance_variable_get(:@hello) #nil
p h.method1 #"pavan" - initialization of @hello
p h.instance_variable_get(:@hello) #"pavan"
If the variable is undefined (first call of `instance_variable_get` in my example) you get `nil`.
As Andrew mention in his comment:
You should not make this the default way you access instance variables as it violates encapsulation.
A better way is to define an accessor:
class Hello
def method1
@hello = "pavan"
end
attr_reader :hello
end
h = Hello.new
p h.hello #nil
p h.method1 #"pavan" - initialization of @hello
p h.hello #"pavan"
If you want another method name, you could alias the accessor: `alias :my_hello :hello`.
And if the class is not defined in your code, but in a gem: You can modify classes in your code and insert new functions to classes.
Problem
If an instance variable belongs to a class, can I access the instance variable (e.g. `@hello`) directly using the class instance? ``` class Hello def method1 @hello = "pavan" end end h = Hello.new puts h.method1 ```