Oui, vous pouvez utiliser instance_variable_get
comme ça :
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"
Si la variable est indéfinie (premier appel de instance_variable_get
dans mon exemple) vous obtenez nil
.
Comme Andrew l'a mentionné dans son commentaire :
Vous ne devez pas en faire le mode d'accès par défaut aux variables d'instance, car cela viole l'encapsulation.
Une meilleure solution consiste à définir un accesseur :
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"
Si vous voulez un autre nom de méthode, vous pouvez alias l'accesseur : alias :my_hello :hello
.
Et si la classe n'est pas définie dans votre code, mais dans une gemme : Vous pouvez modifier les classes dans votre code et insérer de nouvelles fonctions dans les classes .