c - Ruby C API - 如何删除类方法(特别是新方法)?

标签 c ruby

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

我已阅读 this但是

class Test
end

class <<Test
   remove_method :new
end

刚给我

NameError: method `new' not defined in Class

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

最佳答案

new 方法做了 3 件事:

  • 它调用分配
  • 它调用初始化
  • 它返回新对象(并忽略初始化的返回值)。

我认为您无法成功删除它。然而,将 new 设为私有(private)是可以的:

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

关于c - Ruby C API - 如何删除类方法(特别是新方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12409954/

相关文章:

c - 为什么我得到 errno EINVAL (innvalid parameters) 但只有当文件为空时

mysql - 如何高效地从 Rails 中的大表中获取所有行?

ruby-on-rails - 带插值的 Ruby Cucumber 多行引号?

mysql - Ruby on Rails,保存!返回 true 但数据库行未更改(仅在生产中;在开发中工作正常)

c - 维吉尼亚密码

c - 为什么 fread() 在 Msys/MinGw 下不能工作(跳过字节)?

ruby - 在 ruby​​ 中使用正则表达式计算字符串中数字和字符的长度

ruby - 将数组转换为每个元素的嵌套哈希

比较两个数据结构的值

c - 汇编语言中 .long function_name 的含义