0

私の質問は非常に基本的でばかげているかもしれませんが、なぜ出力がこのようになるのか混乱しています。

MyClass = Class.new String
MyClass.ancestors
=> [MyClass, String, ..]

AnotherClass = Class.new MyClass
=> AnotherClass 
AnotherClass.ancestors
=> [AnotherClass, MyClass, String, ..]

上記のコードでは、MyClass という名前の Class の新しいインスタンスを作成し、オブジェクト (Ruby ではすべてがオブジェクト) 'String' をパラメーターとして渡しています。MyClass の祖先リストに「文字列」が表示されるのはなぜですか。String から MyClass を継承していませんが、それが Ruby が行っているようです。コピーコンストラクターとして機能しますが、なぜ継承なのですか?

4

2 に答える 2

3

以下

class A < B
end

実際には、構文シュガーにすぎません

A = Class.new B

詳細については、 Random Ruby Tricks: Class.newおよび公式ドキュメントを参照してください。

于 2013-02-12T14:18:40.837 に答える
1

継承MyClassしていないString

はいあなたが持っています。への引数Class::newの意味は次のとおりです。

new(super_class=Object)a_class

Object指定されたスーパークラス (またはパラメーターが指定されていない場合) を使用して、新しい匿名 (名前のない) クラスを作成します。

于 2013-02-12T14:55:23.520 に答える