クラス名の直後にクラスメソッドを呼び出す

本日の知見。

module Asd extend self
  def some_method
    p 'something'
  end
end

今までこういうコードは見たことがなかったんですが、上記のコードのようにモジュール名(クラス名)の直後に extend を呼び出すことが出来るみたい。
で、いろいろと試してみた。

module M
    def homu
        p "homu"
    end
end

class Super
end

# クラスでも出来る
class X extend M
end

# 他のクラスメソッドも呼び出せる
class X include M
end

# そもそもメソッドじゃなくてもいい
class X def homu
    p :homu
end end

# 継承している場合はエラー
# `Integer': can't convert Class into Integer (TypeError)
class X2 < Integer include M
end

と、いうような感じで継承をしていなければクラス名の直後に直接構文を続けてかけるぽい。
まあ実際は件のコードみたいに extend とか呼び出したりする事が実用的そう。
個人的には以下のようなワンライナーであれば ; が必要ないので割と知見。

# ; は必要がない
class X include M end
# 以下のように ; が必要だと思ってた…
# class X; include M; end

まあでもよくよく考えると

module M1 module M2
end end

みたいにネストした module の定義を1行にまとめることコードを書くことが多いのでこれの延長戦だと思えば…。