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

时间:2014-05-12 20:20:11

标签: ruby

给定一组使用Structs定义的类,例如:

K1=Struct.new(:a,:b)
K2=Struct.new(:c,:d)
...

是否仍然可以添加一个常用方法:foo到以这种方式定义的每个类,或者我是否需要深度重构?

通常使用继承(或mixins)来完成这些行为的保理,但我不知道现在是否仍然可以使用这样的因子,从这种基于结构的类定义开始。

1 个答案:

答案 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#includeObject#extend