0

马上,这感觉像是一个愚蠢的问题......但我觉得我在这里错过了一些东西

如何在属于模块的类中自动继承模块方法?

module MyModule

  def hello
    puts "hello"
  end

  class Foo; end
  class Bar; end
end

哈尔普

f = MyModule::Foo.new
f.hello
# NoMethodError: undefined method `hello' for #<MyModule::Foo:0x007f8d8b010200>

b = MyModule::Bar.new
b.hello
# NoMethodError: undefined method `hello' for #<MyModule::Bar:0x007f8d8b03a140>

我觉得我不应该这样做

module MyModule
  class Foo
    include MyModule
  end
end

否则将类放入模块有什么意义?

4

1 回答 1

1

我不太明白你想完成什么。就我而言,Modules在 Ruby 中被用作命名空间和混合。

您如何期望模块中的所有类都包含之前定义的模块函数?对我来说,这没有意义。可能,您正试图强制执行不是 Ruby 中的特性的行为。

通常,您将遵守语言约束,创建一个模块,其中的函数共享一些共同的目标,然后include它们在一个类中以扩展其行为——另一种避免缺乏多重继承的方法。

我看不到你想要完成的事情的美妙之处。正如我所说,模块被用作命名空间,而 mixin 并不是 Ruby 社区为它们准备的。

关于将类放入模块中的意义,我想这就是模块化和面向对象的编程实践。

于 2013-11-07T20:46:16.267 回答