如何输出包含Singleton方法的Ruby类名

时间:2016-04-22 03:57:49

标签: ruby

我的目标是:

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"

我无法显示包含单例方法的类的名称。我尝试了许多不同的刺和标准库搜索,但没有找到答案。

这部分没有意义,因为您不需要类方法来显示首先调用该方法所需的信息。我很好奇是否可能,或者我完全错过了范围。

3 个答案:

答案 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