有一门课是这样的.

module Foo
  class Bar
  end
end

我想得到Bar而不是Foo的类名.

bar = Foo::Bar.new
bar.class.to_s.match('::(.+)$'){ $1 }

我可以通过这个代码得到类名,但我认为这不是最好的方法.

有没有更好的方法来获取没有名称空间的类名?

推荐答案

实现这一点的标准方法是调用Object#classModule#name.例如:

bar.class.name.split('::').last
#=> "Bar"

Ruby相关问答推荐

从整数中 Select 重复数字的字符串

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

数组切片中没有左边框的Ruby范围

在 Ruby 中,如何确定字符串是否不在数组中?

Encoding::UndefinedConversionError

Ruby 连接字符串并添加空格

模块中的实例变量?

删除 Ruby 数组中的 nil 和空白字符串

Vagrant - 如何拥有特定于主机平台的配置步骤

无法在 macos-10.15.6 上Bundle 安装 puma 4.3.5 或 gem puma 与 ruby​​-2.6.6

有没有办法在 RSpec 中取消存根?

Ruby 运算符优先级表

从类对象获取类位置

在现有 Jekyll 安装中切换主题

如何通过拆分字符的最后一次出现将字符串拆分为仅两部分?

判断是否在 SASS 中定义了变量

很好地格式化输出到控制台,指定选项卡的数量

Ruby:使用 ENV 变量(如果存在)的最简洁方法,否则使用默认值

何时在 Ruby 中使用 Struct 而不是 Hash?

我更改存储库 URL 后 Capistrano 部署失败