原です。

|鄭です。
|
|まつもとさんの、include と extend の違いの説明でわかった気になっているの
|ですが、原さんの説明で、あらたな疑問がでて来ました。

|以下の右と左でなにか違うのでしょうか?
|
|  class Hare                            class Hare
|     class <<Hare                          ..
|       include Hoge                     end
|     end                                class <<Hare
|     ...                                  include Hoge
|  end                                   end
|
|  class Hare                            class Hare
|    Hare.extend Hoge                       ...
|    ...                                 end
|  end                                   Hare.extend Hoge
|
|そういえば、
|
|   class Keho                           class Keho
|      def Keho.classmethod              end
|        ...                             def Keho.classmethod
|      end                                  ...
|   end                                  end
|
|もなにか違うのでしょうか?

これらはほとんどおなじです。違うのは定義される場所の違いによる
定数のスコープに入るか入らないかぐらいです。

  class Keho
    Gohogoho = 0
    def Keho.classmethod
      Gohogoho #=> 0
    end
  end
  Keho.classmethod #=> 0


  class Keho
    Gohogoho = 0
  end
  def Keho.classmethod
    Gohogoho
  end
  Keho.classmethod #=> undefined const. Gohogoho


  << による特異クラス定義も同様で、

  class Hare
    Harehoro = 0
    class <<Hare
      Harehoro #=> 0
    end
  end


  class Hare
    Harehoro = 0
  end
  class <<Hare
    Harehoro #=> undefined const.
  end

ですね。

(ref.) [ruby-list:2610]

しかし class <<Hare をつい class >>Hare とか Hare<< class と
書いてしまうのはわたしだけだろうか?(^^;