2016-04-08 3 views
0
class R 
    def initialize(number) 
    @number = number 
    end 

    attr_accessor :number 
end 

r = R.new(3) 

r.number => 3 
[email protected] => syntax error 
r.(@number) => undefined method call 

Почему переменная экземпляра не может быть вызвана таким образом?вызов метода экземпляра ruby ​​

Насколько я знаю, благодаря attr_accessor

def number 
    @number 
end 

Так r.number метод должен возвращать [email protected], который [email protected]

Что я пропустил?

+1

здесь пила ответ идеально подходит для того, чтобы вы могли получить переменную экземпляра '@ number' значение' r.instance_variable_get (: @ number) 'таким образом –

ответ

4

r.number метод должен возвращать [email protected] который [email protected]

No. Нигде в определении метода number говорит [email protected]. В нем говорится: @number. Он должен вернуть значение @number.

@number - это переменная экземпляра, а не метод. Вы не можете его вызывать (например, так или иначе), вы можете ссылаться только на него из соответствующей области.

+0

Есть ли другой обычный способ попасть в область помимо метода getter ? –

+0

@SzilardMagyar 'instance_eval'. Но это побеждает ООП, а также медленно. Если вы можете использовать другой синтаксис, вы можете использовать 'instance_variable_get', как отмечает Раджарши Дас. – sawa