我的目标是:
class Bermuda
class << self
def grass
puts self.superclass.name
end
end
end
# my goal is that this expression
Bermuda.grass
# will output a string of the class name it resides in
=> "Bermuda"
我无法显示保存单一实例方法的类的名称。我尝试了许多不同的刺和标准库搜索,但没有找到答案。
这部分毫无意义,因为您不需要类方法来显示调用该方法首先需要的信息。我很好奇这是否可能,或者我完全错过了范围。
只需在self
上调用name
class Bermuda
class << self
def grass
puts self.name
end
end
end
不建议使用这种实现,因为获取类名所要做的就是调用Bermuda.name
有关更多信息,请参阅下面@MatthewCliatt给出的答案。
它就像:
self.class.name
但是,问题是这不是针对类方法的,而是针对实例方法的。这意味着您不会用self
声明它。这是你的代码:
class Bermuda
class << self
def grass
puts self.superclass.name
end
end
end
这将使grass
方法成为类方法。你必须像Bermuda.grass
一样称呼它.但是,如果你可以调用像上面这样的类方法,你可以很容易地编写:Bermuda.name
.
我假设您不能调用类方法,可能是因为您正在使用实例。所以你想这样写这个方法:
class Bermuda
def grass
puts self.class.name
end
end
你说你正在创建一个单例方法,但我不认为你的方法是通常意义上的单例方法(即对象上的方法是一个类的实例,但本身不是类)。
我相信您使用的class << self
表示法仅导致定义类方法,与以下内容相同:
def self.grass
puts name
end
In irb:
2.3.0 :003 > class Bermuda; def self.grass; puts name; end; end
=> :grass
2.3.0 :004 > Bermuda.grass
Bermuda