类似于模块的包含在Ruby中的Structs?

时间:2017-06-21 21:38:30

标签: ruby struct module

所以我尝试了以下代码:

ComplicatedClass
  module InternalObjects
    InternalThing = Struct.new(:name, :description)
  end
end

class ComplicatedClass
  module Operations
    def operate_on_object
      InternalThing.new
    end
  end
end

class ComplicatedClass
  include InternalObjects
  include Operations

  def other_operate_on_object
    InternalThing.new
  end
end

然后使用cc = ComplicatedClass.newcc.other_operate_on_object工作正常,但调用cc.operate_on_object会导致NameError: uninitialized constant ComplicatedClass::Operations::InternalThing

显然,我可以选择没有InternalObjects模块,只需在ComplicatedClass中定义我的结构:

class ComplicatedClass
  InternalThing = Struct.new(:name, :description)
  include Operations

  def other_operate_on_object
    InternalThing.new
  end
end

并没有问题,但是在其他地方重复使用相同的结构是令人讨厌的(并且可能导致初始化例程中的元编程作为变通方法)。

同样,我也可以在操作模块(new)中命名ComplicatedClass::InternalThing.new调用,但从代码重用的角度来看,它是非常不明智的。

  • 有没有办法在模块中定义一个Struct,这样你就可以将模块包含在一个类中,然后让其他模块中包含的方法能够使用所述的Struct?
  • 即使你可以,这是个坏主意吗?
  • 如果我有一些Structs,我会在整个应用程序中以某种频率重用,是否有一种正确的方法来以类似模块的方式定义它们?或者我应该采取不同的方法?
  • 元编程实际上是我最好的选择吗?
  • 或者即使他们非常非常 我应该把它们变成自己的非常愚蠢的物体 全面的课程?

0 个答案:

没有答案