Ruby当前类

Ruby当前类,ruby,Ruby,如何确定Ruby中当前的开放类?在类本身内部: class_name = self.class 在名为obj的初始化对象上: class_name = obj.class 如果您有obj=SomeClass.new您将得到obj.class在类定义主体内的类,self指的是类本身Module#name将告诉您类/模块的名称,但前提是它实际上有一个名称。(在Ruby中,没有“类名”这样的东西。类只是像其他任何对象一样被分配给变量的对象。只是如果你碰巧将一个类对象分配给一个常量,那么name方法

如何确定Ruby中当前的开放类?

在类本身内部:

class_name = self.class
在名为
obj
的初始化对象上:

class_name = obj.class

如果您有
obj=SomeClass.new
您将得到
obj.class
定义主体内的类,
self
指的是类本身
Module#name
将告诉您类/模块的名称,但前提是它实际上有一个名称。(在Ruby中,没有“类名”这样的东西。类只是像其他任何对象一样被分配给变量的对象。只是如果你碰巧将一个类对象分配给一个常量,那么
name
方法将返回该常量的名称。)

例如:

puts class Foo
  name
end
# Foo
但是:


在我的例子中,
name
方法被重写了,我发现
给了我同样的结果

class Foo
 puts self.name
 puts self.to_s
end
#=> Foo
#=> Foo

如果您希望通过类名(字符串)进行比较:


使用“class”作为变量,“class”是保留关键字。重命名变量“class”
class\u name
对于该变量来说仍然不是一个好名字,因为它是类对象,而不是名称字符串。变量的更好名称可能是
klass
class Foo
 puts self.name
 puts self.to_s
end
#=> Foo
#=> Foo
class Foo
  def my_class_name_is
    self.class.name
  end
end

Foo.new.my_class_name_is
=> "Foo"