出于调试目的,我想在初始化新对象时输出当前类名。所以,这就是我所做的。
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
我理解self
是Custom
的对象。我的问题是如何让Base#initialize
打印Base
?所以我的最终输出将是
line 1: Custom
line 2: Base
当我初始化Base对象时,它也会打印line 2: Base
。
答案 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