Я знаю, что в экземпляре класса я должен читать значения переменных через переменные экземпляра. Но каковы последствия их чтения через себя?Чтение переменных экземпляра с помощью self
См пример ниже:
class Test attr_writer :aa
def testing
puts @aa
puts self.aa <-- what are the consequences if I apply attr_reader :aa and try to read 'aa' via self.aa ? can I read other value by accident?
end
def self.bb
a = self.new
a.aa = "111"
a.testing
end
end
Test.bb
'puts self.aa' - это то же самое, что' puts aa'. Это потому, что 'self' является приемником по умолчанию. Поскольку 'testing' является методом экземпляра, он вызывается экземпляром' Test', поэтому 'self' равно этому экземпляру внутри метода. Вы можете подтвердить, что добавив 'puts 'self = # {self}" 'внутри метода. Эффект 'puts aa' (или' puts self.aa') зависит от того, был ли вы создан аксессуар для 'aa' (например,' attr_reader: aa'). Если у вас есть, 'puts aa' будет давать значение @aa через accessor; если вы этого не сделали, будет создано исключение, информирующее вас о том, что нет локальной переменной или метода 'aa'. –
Хорошо, любая конкретная причина для: «Но использование метода вместо @variable рекомендуется по разным причинам». ? –