获取没有父名称的Ruby纯类名称,是否有任何直接方法?

布鲁克斯

我经常需要获取对象的纯类名,如下代码:

class Foo
    class Bar

    end
end
obj = Foo::Bar.new
puts obj.class.name  # It shows "Foo::Bar", while what I want is just "Bar"

我知道它可以通过obj.class.name.split('::')。last完成,但是,不应该有一个只返回“ Bar”的方法吗?

约格午间

在Ruby中,类实际上没有“名称”。类是一个像其他任何对象一样的对象,它像其他任何对象一样被分配给变量。类没有名称,就像数字或字符串没有名称一样。

举个例子:

foo = Class.new

Bar = foo
Baz = foo

Bar = nil
remove_const :Bar

在此示例中,类的“名称”应该是什么?

嗯,有一个名为方法nameModule类。它的作用如下:如果第一次将类对象分配给一个常量,则该常量的名称(请注意,即使是一个模糊的概念!)也将成为该类的名称,否则该名称将只是是nil

扩展上面的示例:

foo = Class.new

foo.name
# => nil

Bar = foo

foo.name
# => 'Bar'
Bar.name
# => 'Bar'

Baz = foo

Baz.name
# => 'Bar'

Bar = nil
remove_const :Bar

foo.name
# => 'Bar'

这是另一个例子:

foo = Class.new
Bar = foo
Baz = foo

class Baz
  class Quux; end

  Xyzzy = Quux
end

foo::Xyzzy.name
# => 'Bar::Quux'

请注意,即使Quux在内部定义Baz并通过foo::Xyzzy它进行访问Bar::Quux,其名称仍会打印

另外,两个不同的类可以具有相同的名称:

Foo = Class.new

Bar = Foo

Foo = nil
remove_const :Foo

Foo = Class.new

Baz = Foo

Foo = nil
remove_const :Foo

Bar.name
# => Foo

Baz.name
# => Foo

Bar == Baz
# => false

类的“名称”只是对人类读者的调试帮助,您永远不要将其用于其他任何用途,也不要以编程方式使用它(甚至取决于字符串的特定结构)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有方法的类是否有特殊名称?

如何使用Groovy获取没有继承方法的类的所有方法名称?

如何从没有任何“名称”的对象获取值?

获取父类名称?

获取父类名称?

休眠-是否有任何方法可以获取违反约束的列的名称?

ruby-从类方法获取类的名称

没有包的情况下如何获取类的名称?

Perl AUTOLOAD - 获取没有类名的未知方法的名称

是否有内置的方法可以在 Ruby 中获取国家/地区名称?

从python目录中获取所有模块名称,类名称和方法名称

没有方法名称的Ruby调用

有没有办法用父类的名称空间/类空间来引用子类?

有没有办法在父类中获得子类的名称?

获取具有元类的类的名称

是否可以在没有URL名称的情况下拥有父状态?

类“名称”没有成员类“成员的名称”

是否有任何简单的方法来获取和发送“当前方法名称”作为Java中的参数?

如何获取在类的方法中定义的所有变量的名称

在父类中与扩展类具有相同的方法名称

在没有“typename”的基类名称中使用依赖名称

如何在JavaScript中获取具有类名称的确切父项?

获取没有文件后缀的页面名称

在没有模板参数的派生类中使用模板类名称是否合法?

获取没有完整名称空间的类型名称

Ruby Colorize gem-是否有一种方法可以从彩色字符串中获取颜色名称?

如何在没有类的实例的情况下获取类的属性名称?

如何使用Beautifulsoup4检查父标记是否具有名称不是“ div”的直接子代

声纳重命名此方法; 有在父类中的“私有”方法具有相同名称