Похоже, вы не знаете, когда использовать переменные экземпляра.
В первой части вашего кода вы говорите
inst = @MyClass.new(params)
inst.action
Это захват объекта, хранящегося в переменной экземпляра @MyClass
, вызов new
для него и сохранение результата that в локальной переменной inst
.
Но когда вы хотите сделать @inst.action
во втором наборе кода, вы полагаетесь на @inst
, возвращаемый методом self.inst
, который является методом, а не переменной экземпляра. Более того, метод self.inst
больше не обращается к переменной экземпляра @MyClass
- он обращается к константе с именем MyClass
.
Я думаю что вы хотите, из того, что вы написали, это:
def inst
@MyClass.new(params) # access instance variable
end
def method1
inst.action # call a method that access the instance variable, then call `action` on that
# or `self.inst.action` would be equivalent
# ...
end