Ответ 1
Да, вы можете использовать instance_variable_get
следующим образом:
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"
Если переменная undefined (первый вызов instance_variable_get
в моем примере), вы получаете nil
.
Как упоминает Андрей в своем комментарии:
Вы не должны делать это по умолчанию, так как вы обращаетесь к переменным экземпляра, поскольку это нарушает инкапсуляцию.
Лучше всего определить аксессор:
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"
Если вы хотите другое имя метода, вы можете добавить псевдоним к аксессуру: alias :my_hello :hello
.
И если класс не определен в вашем коде, а в камне: вы можете изменить классы в своем коде и вставить новые функции в классы.