我有一个类方法,我用它来获取类的替代名称。 我们的想法是有一个抽象的Figure类,它有一个通用的方法来打印它的孩子。我想让它打印出在每个孩子中被覆盖的替代名称。
这是我的代码:
class Figure
def to_s
s = self.name + ' '
@edges.each do |e|
s += e.to_s
end
s
end
def self.name
puts 'override me'
end
end
class Line < Figure
def initialize(points)
@edges = [Edge.new(points[0], points[1])]
end
def self.name
'line'
end
end
......哪个不起作用:
'to_s': undefined method 'name' for #<Line:0x00000001f12880> (NoMethodError)
如果我用实例替换类方法它完美地工作,那么......为什么会发生这种情况?有什么区别?
答案 0 :(得分:0)
如果你使name
属性存储在Figure类中,这将更加简单:
class Figure
def initialize
@name = 'DefaultFigure'
end
def to_s
s = @name + ' '
@edges.each do |e|
s += e.to_s
end
s
end
end
class Line < Figure
def initialize(points)
@name = 'Line'
@edges = [Edge.new(points[0], points[1])]
end
end
答案 1 :(得分:0)
哎呀...我只是想通了你必须使用self.class.name
来访问INSIDE一个实例的类方法。像这样:
def to_s
s = self.class.name + ' '
@edges.each do |e|
s += e.to_s
end
s
end
现在有效。