给出以下代码:
module Foo
extend ActiveSupport::Concern
module ClassMethods
def foo
puts 'foo'
end
end
end
class Bar
include Foo
end
我想做的是致电Foo.foo
而不是Bar.foo
。有时在原始模块上调用类方法会更自然,特别是当功能与包含的类无关时,更好地与原始模块名称一起描述。
答案 0 :(得分:5)
这似乎是一种代码味道。话虽如此,你可以让Foo模块使用类方法扩展自己:
module Foo
extend ActiveSupport::Concern
module ClassMethods
def foo
puts 'foo'
end
end
extend ClassMethods
end
class Bar
include Foo
end
Bar.foo
Foo.foo