这些课程有什么不同?他们的目的有什么不同?

推荐答案

BasicObject是Ruby 1.9中引入的,它是Object的父类(因此BasicObject是Ruby中所有类的父类).

BasicObject本身几乎没有任何方法:

::new
#!
#!=
#==
#__id__
#__send__
#equal?
#instance_eval
#instance_exec

BasicObject可用于创建独立于

BasicObject不包括内核(用于puts等方法)和


内核模块中混合了Object个,构成了内置内核

如果你不需要Object的方法,你可以使用BasicObject作为你的对象的父对象,否则你会取消它们的定义:

# when you inherit Object
class Tracer
  instance_methods.each do |m|
    next if [:__id__, :__send__].include? m
    undef_method m
  end

  # some logic
end

# when you inherit BasicObject
class Tracer < BasicObject
  # some logic
end

Ruby相关问答推荐

运行跳过的RSpec测试,如果通过则失败

MongoDB通过Brew Services";未定义的方法`plist_starting';";

使用 Ruby 仅删除数组中的特定重复项

ruby:rubocop 抱怨将 if else 转换为 case 语句

Procs的绑定

查看 Savon 请求 XML 而不发送到服务器

我可以在 Ruby 的 heredoc 中访问变量吗?

如何在 ruby​​ 中列出当前范围内的当前可用对象?

Rails 类 << self

如何判断我是从 JRuby 还是 Ruby 运行?

如何声明 RSpec 中示例之间共享的变量?

对于基于 GitHub 的 gem,强制Bundle 安装使用 https:// 而不是 git://

Ruby RVM apt-get 更新错误

困惑,像python,ruby这样的语言是单线程的吗?不像说java? (对于网络应用程序)

当我将参数传递给脚本时,使用 gets() 会出现没有这样的文件或目录错误

如何转换 Ruby 哈希,使其所有键都是符号?

如何理解 class_eval() 和 instance_eval() 的区别?

为什么 Ruby 文档中的方法前面有一个井号?

如何使用器重新安装 gem

如何判断一个类是否已定义?