我的目标是:
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"
我无法显示包含单例方法的类的名称。我尝试了许多不同的刺和标准库搜索,但没有找到答案。
这部分没有意义,因为您不需要类方法来显示首先调用该方法所需的信息。我很好奇是否可能,或者我完全错过了范围。
答案 0 :(得分:2)
只需在name
self
即可
class Bermuda
class << self
def grass
puts self.name
end
end
end
不建议使用这种实现,因为只需调用Bermuda.name
请参阅@MatthewCliatt下面给出的答案以获取更多信息。
答案 1 :(得分:1)
它很简单:
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
答案 2 :(得分:0)
你说你正在创建一个单例方法,但是我不认为你的方法是通常意义上的单例方法(即一个对象的方法,它是一个类的实例,但不是本身就是一个类。)
我相信您使用的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