ruby ARGF 的类名很奇怪

问题描述 投票:0回答:1

这是一个 cruby bug 吗?

km@latika:~$ ruby -v -e 'puts nil.class.to_s, ARGF.class.to_s'
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]
NilClass
ARGF.class
km@latika:~$ jruby -v -e 'puts nil.class.to_s, ARGF.class.to_s'
jruby 9.3.9.0 (2.6.8) 2023-01-16 9.3.9.0+ds-8 OpenJDK 64-Bit Server VM 17.0.10+7-Debian-1deb12u1 on 17.0.10+7-Debian-1deb12u1 +jit [x86_64-linux]
NilClass
ARGFClass

我在其他地方没有见过包含句点的类名...

ruby reflection
1个回答
0
投票

这不是一个错误,该类是使用该不寻常的名称显式创建的。来自

io.c

rb_cARGF = rb_class_new(rb_cObject);
rb_set_class_path(rb_cARGF, rb_cObject, "ARGF.class");

rb_cARGF
是类对象,
rb_set_class_path
将其注册在名称
"ARGF.class"
下。这只能在 C 中实现,在 Ruby 中无法创建此类。

也许他们不想将其作为常规类公开,因为创建另一个

ARGF.class
实例没有什么意义。您只能与其预定义的实例进行交互
ARGF

© www.soinside.com 2019 - 2024. All rights reserved.