我遇到这么一个场景。比如我有两个 module(Searchable, Filterable)和一个使用这两个 module 的类 A。 定义如下:
module Searchable
end
module Filterable
end
class A
include Searchable
include Filterable
end
但是在 Searchable、Filterable、A 中,他们里面包含的 method 很多都会用到一组公共的 methods,为了避免代码重复,我的一个想法是讲这些公共方法也作为 module 提取出来(例如叫做 Pub)。那么上面的代码就会变成下面这样:
module Pub
end
module Searchable
include Pub
end
module Filterable
include Pub
end
class A
include Pub
include Searchable
include Filterable
end
上面我之所以 3 个地方我都 include 了 Pub 是因为: 1、Searchable 和 Filterable 两个 module 可能被其他地方重复使用,所以为了保证代码能够运行,所以需要包含。 2、在 class A 中 include Pub 主要是设想一种情况,就是我并不知道 Searchable 这些 module 中已经 include Pub,但是我需要用到 Pub 的功能,所以我 include 了 Pub (当然,如果完全是自己写的代码肯定不会出现这种情况)
问题: 所以在上面的代码结构中,我们其实是在 class A 中多次 include 了 Pub 这个 module,虽然看到相关资料说 include 并不会实际去 copy 代码过来,只会产生一个指向 Pub module 的 reference,但是这样毕竟还是重复引用了。