有一门课是这样的.

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相关问答推荐

环绕分隔线,保留第一列,最小最终长度

如何从外部获取给定 lambda 的参数值,而不显式返回其“绑定”?

Ruby 和用正则表达式分割字符串

Ruby符号前面的“-”是什么意思?

Docker for Mac - mkmf.rb 找不到 ruby​​ 的头文件

为什么整数除法在许多脚本语言中舍入?

判断字符串是否与 ruby​​ 中的正则表达式匹配的最快方法?

如何只获取没有命名空间的类名

带有可选参数的方法

`expect`测试中的Rspec`eq`与`eql`

OpenSSL vs GPG 用于加密异地备份?

RSpec allow/expec vs expect/and_return

错误:Windows 的 SASS 安装

在 OSX 10.10 Yosemite 上安装 Nokogiri

ruby `encode': "\xC3" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)

使用正则表达式进行 Ruby Electron邮件验证

Rspec: expectvsexpect什么区别?

如何从 Ruby 中的字符串中删除特定字符?

如何期望 RSpec should_receive 的一些(但不是全部)参数?

如何仅从 Gemfile 中查看依赖关系树?