小编典典

实例变量:self vs @

all

这是一些代码:

class Person
  def initialize(age)
    @age = age
  end

  def age
    @age
  end

  def age_difference_with(other_person)
    (self.age - other_person.age).abs
  end

  protected :age
end

我想知道的是 using@ageself.ageinage_difference_with方法之间的区别。


阅读 81

收藏
2022-07-17

共1个答案

小编典典

写入@age直接访问实例变量@age。写入self.age告诉对象向自身发送消息age,该消息通常会返回实例变量@age——但可以根据age方法在给定子类中的实现方式执行任何数量的其他操作。例如,您可能有一个
MiddleAgedSocialite 类,它总是报告其年龄比实际年龄小 10 岁。或者更实际地,PersistentPerson
类可能会懒惰地从持久存储中读取该数据,并将其所有持久数据缓存在哈希中。

2022-07-17