0

クラスを作成し、と呼ばれる関数と呼ばFooれる関数を定義するとどうなるでしょうか?initialize new

後で をコーディングfoo = Foo.newすると、どの関数が実行されますか? initialize関数は宣言時に呼び出されることになっているためnew

編集:

明確にするために:

class Foo
    def new
    end
end

それは私が話しているようなものです。

4

2 に答える 2

4

クラスで定義newすると、関数が呼び出され、クラスnewの新しいインスタンスを作成する典型的なメソッドがオーバーライドされます。まったくオーバーライドしないほうがよいのですが、Ruby はそのように優れているため、Ruby でオーバーライドしてやり過ごすこともできます。

その後もクラスの新しいインスタンスが必要な場合は、呼び出しFoo.allocateて取得できます。次にinitialize、そのオブジェクトを手動で呼び出して、初期化イベントをトリガーできます。

于 2013-02-04T22:13:58.050 に答える
2

手動定義関数はインスタンス関数になるため、new実行時に手動定義関数は呼び出されません。クラス関数を呼び出しています。Foo.newnewFoo.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が指摘したように、問題が発生します。

于 2013-02-04T22:16:47.400 に答える