1. ホーム
  2. ruby

[解決済み] インスタンス変数: self vs @

2022-04-15 22:14:09

質問

以下はそのコードです。

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

私が知りたいのは、このような場合に @ageself.ageage_difference_with メソッドを使用します。

どのように解決するのですか?

書き方 @age はインスタンス変数に直接アクセスします。 @age . 書き方 self.age は、オブジェクトに自分自身にメッセージを送信するよう指示します。 age というインスタンス変数を返します。 @age - を実行する方法によっては、他の多くのことを行うことができます。 age メソッドが特定のサブクラスで実装されています。例えば、MiddleAgedSocialiteクラスがあり、常に実際の年齢より10歳若く報告するような場合です。あるいは、より現実的な例として、PersistentPersonクラスが永続ストアからデータを読み込んで、永続データをすべてハッシュにキャッシュするかもしれません。