【发布时间】:2013-12-09 23:54:03
【问题描述】:
我知道在类实例中我应该通过实例变量读取变量的值。 但是通过 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 的值;如果没有,则会引发异常,通知您没有局部变量或方法aa。 -
好的,任何特殊原因:“但是出于各种原因,建议使用该方法而不是@variable。” ?
标签: ruby instance-variables class-variables