Не понимаю, почему атрибуты 'attributes =' внутри инициализации должны иметь префикс self.Зачем нужен явный я внутри инициализации() ruby
'имя' метод не должен иметь префикс себя называть 'атрибуты' метод
class A
attr_accessor :attributes
def initialize attrs ={}
self.attributes = attrs
end
def name
puts attributes
end
end
a = {"name" => "someone"}
b = A.new a
b.name
выход { "имя" => "кто-то"}
если self.attributes = attrs
изменение attributes = attrs
output gonna be nil
Все это зависит от того, как Ruby видит 'attributes =' в теле вашего метода 'initialize'. Без 'self', чтобы заставить его быть вызовом метода, он часто интерпретируется как назначение переменной. – tadman
Не «часто». * Всегда * 'foo = bar' * всегда * присваивает локальной переменной с именем' foo'. Фактически, именно так Ruby различает локальные ссылки на переменные и вызовы методов: 'foo' является ссылкой на локальную переменную тогда и только тогда, когда раньше было проанализировано присвоение' foo = bar'. –