selfはメソッドの中で呼び出すと、メソッドを実行している、インスタンス自身となり、それはtomになります。tomのことをレシーバーといいます。tomにはUser.new('tom')というインスタンスが代入されいて、最終的にはselfはUser.newを指していることだと思います。

つまりは 「def initialize(name)メソッドはインスタンス変数を保持しており、.nameメソッドでアクセサを参照し保持されたインスタンス変数を見にいくから
hi I am tomになる」ということで宜しいでしょうか?

 class User
      attr_accessor :name

      def initialize(name)
        @name = name
      end

      def sayHi
        self #self.nameがわからない
        puts "hi I am #{self.name}"#なぜself.nameでtomに?
      end
    end

    tom = User new("tom")
    tom.sayHi

分かったこと

  1. p self → User:0x00000000057c4098 @name="tom"
    インスタンス変数を自動的に見ている。
  2. 1.の結果からselfはオブジェクトを見ている。