0

C ライブラリへの Ruby バインディングを作成しています。一部のクラスからメソッドを削除したい- andのnewような他のクラスメソッドでオブジェクトを作成しています.andのデフォルトの実装では、無効なポインターが残ります(クラスのオブジェクトは、不透明な構造体へのポインターにすぎません)。createloadnew

これ読んだけど

class Test
end

class <<Test
   remove_method :new
end

ちょうどくれた

NameError: メソッド `new' がクラスで定義されていません

とにかく、私はCからやりたいです(そして避けたいですrb_eval_string)。

4

1 に答える 1

1

newメソッドは次の 3 つのことを行います。

  • 呼び出しますallocate
  • 呼び出しますinitialize
  • 新しいオブジェクトを返します (initialize の戻り値を無視します)。

うまく削除できないと思います。ただし、new非公開にすることは問題ありません。

class X

  def initialize(a,b)
    @a=a
    @b=b
  end

  private_class_method :new

  def X.create(x,y)
    new(x,y)
  end

end
于 2012-09-13T16:11:45.180 に答える