Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>
何が作られているのか興味津々です。それはオブジェクトのオブジェクトですか?技術的な説明をいただければ幸いです。
Class.new.new
# => #<#<Class:0x44f3a2>:0xd7244e>
何が作られているのか興味津々です。それはオブジェクトのオブジェクトですか?技術的な説明をいただければ幸いです。
あなたと一緒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
。
コンソールでそれをたどることができます:
irb(main):011:0> c = Class.new
=> #<Class:0x000000028245e0>
c
新しいクラスです。
irb(main):012:0> c.new
=> #<#<Class:0x000000028245e0>:0x0000000282a170>
を呼び出すc.new
と、作成したばかりの新しいクラスの新しいインスタンスが返されます。
Class.new
Class
インスタンス(クラス)を作成して返します。もう一度呼び出すとnew
、以前に作成したクラスがインスタンス化されます。
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