在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
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/