Ruby でクラスが継承されると、シングルトン クラスも継承されます。
class A
def self.hello
puts "hello"
end
end
class B < A
end
B.hello #=> "hello"
ただし、モジュールの場合はそうではありません。
module M
def self.goodbye
puts "goodbye"
end
end
class A
include M
end
A.goodbye #=> NameError
この制限を回避するために、多くの人がこの醜いハックに頼っています。
module M
def self.included(c)
c.extend ClassMethods
end
module ClassMethods
def goodbye
puts "goodbye"
end
end
end
わかりましたので、私の質問: モジュールに対するこの制限の背後にある理論的/概念的な理由はありますか? それとも単に実装上の問題でしたか?
C ソース コード (YARV/MRI) を見た後、実装上の問題があることを確認できます (克服できないわけではありませんが、すべて同じです)。しかし、これが唯一の理由ですか? この制限の他の理由はありますか?
ありがとう