如何在通过Ruby Struct定义的类之间共享方法



给定一组使用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#includeObject#extend,以获取有关其工作原理的详细文档。

最新更新