在 Ruby 1.8.7 中,the documentation不在类和模块下列出 ARGF
,并且 ARGF
不是类或模块:
ARGF.class # => Object
在 Ruby 1.9.3 中,the documentation在类和模块下有 ARGF
,但我看到了这个:
ARGF.class # => ARGF.class
ARGF.superclass # => NoMethodError: undefined method `superclass' for ARGF:ARGF.class
ARGF.class.superclass # => Object
- 为什么 Ruby 1.9 文档将
ARGF
放置为类,而实际类是其他东西?或者它们是同一回事? ARGF.class
是元类、虚拟类、单例类还是其他?
最佳答案
ARGF
是用 C 实现的,您可以在其中做一些奇怪的事情。 ARGF
类首先在那里定义。它没有设置为 Ruby 中的任何常量,但其名称设置为“ARGF.class”。
然后 ARGF
常量被设置为该类的一个实例。
rb_cARGF = rb_class_new(rb_cObject);
rb_set_class_path(rb_cARGF, rb_cObject, "ARGF.class");
/* ... */
argf = rb_class_new_instance(0, 0, rb_cARGF);
rb_define_global_const("ARGF", argf);
这是一个 Ruby 代码,它做的事情大致相同。
argf_class = Class.new
def argf_class.name
"ARGF.class"
end
argf = argf_class.new
ARGF = argf
在Ruby里看起来不太合理,但是在C里没问题。虽然,我认为该类可以设置为 ARGFClass
,如 NilClass
、TrueClass
、FalseClass
,因此它是不混淆。
我不知道变化的历史。我认为 Ruby 核心人员希望将 ARGF
放入文档中,这是最简单的方法。 (RDoc 无法显示单例对象的文档。)
关于ruby - Ruby 1.9 中的 ARGF.class 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274652/