2017-02-07 7 views
-1

У меня есть класс, и я пытаюсь получить доступ к переменной экземпляра, и я заметил, что могу сделать это в обоих направлениях, обратившись к нему с помощью @ и без него. Почему si нет ошибки, когда я называю это без @puts "name : #{name}"?Переменные экземпляра экземпляра Ruby от другого метода

class Blabla 
    attr_accessor :name 

    def initialize(blabla) 
     @name = blabla 
    end 

    def populate() 
     puts "name : #{name}" 
     puts "name : #{@name}" 
    end 

end 
+2

1. Это не «переменные экземпляра класса», а просто обычные переменные экземпляра. Терминология важна. 2. из-за 'attr_accessor: name' –

+0

с' attr_reader: name' У меня то же самое, так можно ли каким-то образом избежать этого поведения, но все же быть в состоянии прочитать переменную экземпляра? – Tonja

+0

Да, почему вы снова ставите 'attr_accessor' /' attr_reader'? –

ответ

3

Как указывалось в комментариях:

attr_accessor :name 

представляет собой сокращенную:

def name 
    @name 
end 

def name=(name) 
    @name = name 
end 

Так расширяя свой код, который мы имеем:

class Blabla  
    def name 
    @name 
    end 

    def name=(name) 
    @name = name 
    end 

    def initialize(blabla) 
    @name = blabla 
    end 

    def populate() 
    puts "name : #{name}" 
    puts "name : #{@name}" 
    end 
end 

#{name} ссылается на метод name, который возвращает @name.

#{@name} ссылки @name напрямую.

Также не забудьте понять, attr_writer методов.

Смежные вопросы