2

给定以下代码:

module Foo
  extend ActiveSupport::Concern

  module ClassMethods
    def foo
      puts 'foo'
    end
  end
end

class Bar
  include Foo
end

我想做的是调用Foo.foo而不是Bar.foo. 有时在原始模块上调用类方法感觉更自然,特别是当功能与包含的类无关并且与原始模块名称一起更好地描述时。

4

1 回答 1

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
于 2011-07-08T03:29:26.590 回答