首页 > 解决方案 > 从另一个模块调用模块的选定方法

问题描述

我在模块 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

这行不通。是否可以调用另一个模块中的一个模块定义的函数?

标签: ruby-on-railsruby

解决方案


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

那么它将起作用。


推荐阅读