如何输出环绕在单例方法周围的 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"

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

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

只需在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

相关内容

  • 没有找到相关文章

最新更新