我正在尝试找出Ruby中一个模块的继承来源。目前,我唯一能想到的方法是使用caller
并挑选出适当的行。是否有更符合习惯且不那么脆弱的处理方式?
module ClassMethods
def self.extended(base)
p caller[2]
end
end
我正在尝试找出Ruby中一个模块的继承来源。目前,我唯一能想到的方法是使用caller
并挑选出适当的行。是否有更符合习惯且不那么脆弱的处理方式?
module ClassMethods
def self.extended(base)
p caller[2]
end
end
module ClassMethods
end
class Object
def extend_with_path(mod, filename)
p filename
self.extend(mod)
end
end
class Foo
extend_with_path ClassMethods, __FILE__
end
base
类的内部知识,您可以尝试以下操作:module ClassMethods
def self.extended(base)
p base.new.method(:superfluous_method).source_location
end
end
class Foo
def superfluous_method
end
extend ClassMethods
end
PS: 我知道这是一个巨大的hack,不太友好,我很想知道是否有更好的方法来做类似的事情。
class Foo; FILE_PATH = __FILE__; extend ClassMethods; end
。 - lobati