クラスメソッドから擬似的にインスタンスメソッドを呼ぶ

メモ

Class Foo
  def self.foo
    bar
  end

  def bar
    'bar'
  end
end

Foo.foo
#=> NameError : undefined local variable or method `bar` for Foo:Class

などとクラスメソッドから同クラスのインスタンスメソッドを呼ぶと怒られるが

Class Foo
  def self.foo
    f = Foo.new
    f.bar
  end

  def bar
    'bar'
  end
end

Foo.foo #=> 'bar'

というようにインスタンスメソッドのレシーバをself以外にすると呼べる。
まるでプライベートメソッドを子クラスから呼ぶときのようだ。

それにしても、クラスメソッドから自クラスのインスタンスメソッドはレシーバがselfの場合呼べないのにクラスメソッドから自クラスのインスタンス変数にはアクセスできるのが摩訶不思議。
このインスタンス変数は何のインスタンスの変数なのか?

class Foo
attr :f
  def foo
    @f = 'foo'
  end
end

Foo.foo #=> 'foo'

訂正:失礼しました。上記のプライベートメソッドを子クラスから呼ぶときのようだというのは誤りです。プライベートメソッドを子クラスから呼ぶ際はレシーバはselfです。self以外は呼び出せないのがプライベートメソッドですので丁度クラスメソッドから自クラスのインスタンスメソッドを呼ぶ時の反対です。