0

我正在编写一个与 C 库的 Ruby 绑定。我想new从我的一些类中删除该方法-我正在使用其他类方法创建对象,例如createandload并且默认实现new只是给我留下了一个无效的指针(类的对象只是指向不透明结构的指针)。

我读过这个但是

class Test
end

class <<Test
   remove_method :new
end

刚给我

NameError:类中未定义方法“新”

无论如何,我想从 C 中做到这一点(并避免rb_eval_string)。

4

1 回答 1

1

new方法做了 3 件事:

  • 它调用allocate
  • 它调用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 回答