在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,例如NilClassTrueClassFalseClass,以免引起混淆。

    我不知道更改的历史。我认为Ruby核心人员希望将ARGF放入文档中,这是最简单的方法。 (RDoc无法显示单例对象的文档。)

    关于ruby - Ruby 1.9中的ARGF.class是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12274652/

    10-11 00:54