给定一组使用struct定义的类,如:
K1=Struct.new(:a,:b)
K2=Struct.new(:c,:d)
...
是否仍然有可能为这样定义的每个类添加一个单一的公共方法:foo,或者我是否需要深度重构?
分解这种行为通常是使用继承(或混合)完成的,但我不知道这种分解现在是否仍然是可能的,从这种基于结构的类定义开始。
您可以简单地将一个模块混合到两个结构中。
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
,以获取有关其工作原理的详细文档。