我确实知道这是一个命名空间的事情...任何人都可以给我一些示例代码...我可以通过示例代码快速理解...谢谢!
最佳答案
ruby 中的模块可以用于 3 种可能的事情
1。命名空间
这很简单。
module Foo
class Bar
end
end
f = Foo::Bar.new
2。函数集合
有时,您会有一些不适合任何类的函数。在像java这样的东西中,你只需将它们作为一堆静态方法放在一个类中。在 ruby 中,您会将它们放在一个模块中,因为将它们放在一个类中意味着该类旨在被实例化
module FooHelper
def self.bar
puts 'hi'
end
end
FooHelper.bar # => hi
3。混合
这是所有 3 个中最难理解的。基本上,它是 Ruby 对 C 中的多重继承或 Java 中的接口(interface)的回答。
有时您的逻辑属于多个类,但同时又不适合作为父类。 mixin 描述将模块方法“混合”到类中。这实际上还有很多,但在极高的层次上,它看起来像这样
module CanFoo
def foo
puts 'bar'
end
end
class Baz
include CanFoo
end
class Bar
include CanFoo
end
baz.new.foo # => bar
bar.new.foo # => bar
mixins 是一个相当高级的主题,需要一些时间才能理解什么时候使用 mixins 而不是父类(super class)。在我看来,它们是 ruby 最酷的特性之一,并且比我见过的任何其他 OO 语言都更优雅地处理多重继承问题。
关于ruby-on-rails - 我可以总结一下 Ruby 模块的作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406203/