Ruby如何在super之后获得当前的类名

时间:2017-03-18 15:19:43

标签: ruby

出于调试目的,我想在初始化新对象时输出当前类名。所以,这就是我所做的。

class Base
  def initialize
      puts "line 2: " + self.class.to_s
  end
end

class Custom < Base
  def initialize
      puts "line 1: " + self.class.to_s
      super
  end
end

问题出在控制台上,输出是

line 1: Custom
line 2: Custom

我理解selfCustom的对象。我的问题是如何让Base#initialize打印Base?所以我的最终输出将是

line 1: Custom
line 2: Base

当我初始化Base对象时,它也会打印line 2: Base

2 个答案:

答案 0 :(得分:3)

由于课程也是一个模块,您可以使用Module.nesting

另外,为了确保您没有TypeError: no implicit conversion of Class into String,您应该使用字符串插值:

class Base
  def initialize
    puts "line 2: #{Module.nesting.first}"
  end
end

class Custom < Base
  def initialize
    puts "line 1: #{Module.nesting.first}"
    super
  end
end

Custom.new
# line 1: Custom
# line 2: Base
Base.new
# line 2: Base

答案 1 :(得分:1)

我错过了什么吗?

class Base
  def initialize
    puts "line 2: Base"
  end
end

class Custom < Base
  def initialize
    puts "line 1: Custom"
    super
  end
end

Custom.new
  # line 1: Custom
  # line 2: Base
Base.new
  # line 2: Base