クラスが内部でどのように宣言されているか、およびクラスが宣言されたときに何が起こるかについて、いくつかのコードを試していました。クラスが宣言されると、「クラス」のオブジェクトが作成され、宣言されたクラスの名前を持つ定数が作成されることがわかりました。例えば
MyClass = Class.new
MyClass.class => Class
MyClass.superclass => Object
Class.constants.include? :MyClass => true
私も試しました
x = Class.new => #<Class:0xd886938>
x.class => Class
x.superclass => Object
Class.constants.include? :x => false #why so???
「x」がクラスであることを意味します。私は混乱した原因
class x
def say_hi
'hi'
end
end
与える
SyntaxError: (irb):121: class/module name must be CONSTANT
なぜこうなった?
- -アップデート - -
私は試した
def x.x_method
'x class method'
end
そしてやった
x.methods.include? :x_method => true
同様に
x.singleton_methods.include? :x_method => true
そして主に
x.methods - MyClass.methods => [:x_method]
上記の行x
は、 class のオブジェクトであるため、それがクラスであることを示していますClass
。すべてのユーザー定義クラスは class のオブジェクトであるため、特定のクラスに対してシングルトン メソッドが宣言されていない限り (上記の場合はシングルトン メソッドClass
があります)、それらの初期メソッドも同じである必要があります。x
x => #<Class:0xd886938>
obj_x = x.new => #<#<Class:0xd886938>:0xd30caac>
obj_x.class => #<Class:0xd886938>
上記のコードx
は、新しいオブジェクトを作成できるため、クラスであるという仮定をさらに強化します。x
インスタンスだった場合、new
エラーで失敗します。
私の質問は、なぜ ruby で特定の方法でクラスを宣言できるのですか? それがクラスではない場合、なぜクラスのように振る舞うのですか?