3
Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>

何が作られているのか興味津々です。それはオブジェクトのオブジェクトですか?技術的な説明をいただければ幸いです。

4

4 に答える 4

6

あなたと一緒Class.newに新しいクラスを作成しています。実際、共通の構文を使用してクラスを作成できるだけではありません。

class Bird
    def is
        "word"
    end
end

しかし、次のように使用することもできますClass::new:

Bird = Class.new do
    def is
        "word"
    end
end

上記の例で実行すると、最初の例と同じようにBird.new.is返されます。"word"匿名クラスまたは自由に名前を変更できるクラスを作成すると便利です。あなたの場合:

Class.new.new

呼び出すだけClass.newで、カスタム メソッドやインスタンス変数を持たない新しい匿名クラスが作成され、後で 2 番目のメソッドを介してインスタンス化されますnew

于 2013-08-27T13:15:26.477 に答える
3

コンソールでそれをたどることができます:

irb(main):011:0> c = Class.new
=> #<Class:0x000000028245e0>

c新しいクラスです。

irb(main):012:0> c.new
=> #<#<Class:0x000000028245e0>:0x0000000282a170>

を呼び出すc.newと、作成したばかりの新しいクラスの新しいインスタンスが返されます。

于 2013-08-27T13:01:09.163 に答える
1

Class.newClassインスタンス(クラス)を作成して返します。もう一度呼び出すとnew、以前に作成したクラスがインスタンス化されます。

于 2013-08-27T12:59:32.303 に答える
0
my_class = Class.new # makes a new class which is a subclass of Object
my_instance = my_class.new # makes a new instance object of the class
于 2013-08-27T13:00:40.823 に答える