从另一个模块调用一个模块的选定方法

时间:2019-04-15 01:03:37

标签: ruby-on-rails ruby

我已经在模块A中定义了一个方法。我想从模块B中调用相同的方法

module A
  included do
    def self.some_func
    end
  end
end

module B
  some_func # It raise error (NoMethodError: undefined method). How solve this?
end

module C
  include A
  include B
end

这不起作用。是否可以调用由另一个模块中的一个模块定义的功能?

1 个答案:

答案 0 :(得分:2)

除非module A顶部也有ArgumentError,否则应该extends ActiveSupport::Concern提出。如果没有ActiveSupport::Concern,您将在此处调用Module#included实例方法:

included do
  ...
end

但这需要一个参数。

如果你这样说:

module A
  extend ActiveSupport::Concern
  included do
    def self.some_func
    end
  end
end

然后,您将获得要使用的included和期望的module A

此外,module B并非include A,因此它无处可得some_func

module B
  some_func
end

会给您NoMethodError。如果包含A

module B
  include A
  some_func
end

然后它将起作用。