我有一对简单的类看起来像这样:
class X
include Singleton
def base_name; self.class.name; end
end
class Y < X
# ...
end
我想在#basename
(以及Y
的任何其他子类)上调用X
来返回“X”,而不是子类的名称。
最好的方法是什么?
答案 0 :(得分:2)
试试这个:
class A
BASE_NAME = self.name
def base_name
BASE_NAME
end
end
class B < A
end
A.new.base_name # => "A"
B.new.base_name # => "A"
答案 1 :(得分:0)
一些元编程:
class X
def base_name; self.class.name; end
def self.inherited(subclass)
subclass.class_eval do
define_method(:base_name) do
self.class.ancestors[1].name
end
end
end #inherited
end
class Y < X
end
p X.new.base_name
p Y.new.base_name
但我不会用它。 jtbandes的回答在我看来更好。