クラスを作成し、と呼ばれる関数とと呼ばFoo
れる関数を定義するとどうなるでしょうか?initialize
new
後で をコーディングfoo = Foo.new
すると、どの関数が実行されますか? initialize
関数は宣言時に呼び出されることになっているためnew
。
編集:
明確にするために:
class Foo
def new
end
end
それは私が話しているようなものです。
クラスを作成し、と呼ばれる関数とと呼ばFoo
れる関数を定義するとどうなるでしょうか?initialize
new
後で をコーディングfoo = Foo.new
すると、どの関数が実行されますか? initialize
関数は宣言時に呼び出されることになっているためnew
。
編集:
明確にするために:
class Foo
def new
end
end
それは私が話しているようなものです。
クラスで定義new
すると、関数が呼び出され、クラスnew
の新しいインスタンスを作成する典型的なメソッドがオーバーライドされます。まったくオーバーライドしないほうがよいのですが、Ruby はそのように優れているため、Ruby でオーバーライドしてやり過ごすこともできます。
その後もクラスの新しいインスタンスが必要な場合は、呼び出しFoo.allocate
て取得できます。次にinitialize
、そのオブジェクトを手動で呼び出して、初期化イベントをトリガーできます。
手動定義関数はインスタンス関数になるため、new
実行時に手動定義関数は呼び出されません。クラス関数を呼び出しています。Foo.new
new
Foo.new
class Foo
def new
puts 'new!'
123
end
def initialize
puts 'initialize'
end
end
c = Foo.new
puts c #this will print "#<Confusion:0xb75b20f4>"
c.new #this will print "new!"
編集:
ただし、これを行った場合:
class Foo
def Foo.new
end
end
@Ryanが指摘したように、問題が発生します。