给定一组使用Structs定义的类,例如:
K1=Struct.new(:a,:b)
K2=Struct.new(:c,:d)
...
是否仍然可以添加一个常用方法:foo到以这种方式定义的每个类,或者我是否需要深度重构?
通常使用继承(或mixins)来完成这些行为的保理,但我不知道现在是否仍然可以使用这样的因子,从这种基于结构的类定义开始。
答案 0 :(得分:1)
您可以简单地将模块混合到两个结构中。
module A
def foo
end
end
B = Struct.new :a, :b do include A end
C = Struct.new :c, :d do include A end
puts B.new.respond_to? :foo # => true
puts C.new.respond_to? :foo # => true
有关其工作原理的详细说明,请参阅Module#include
和Object#extend
。