我可以总结一下Ruby模块的功能吗?

wiz*_*tjh 1 ruby ruby-on-rails

我知道它是命名空间的东西......任何人都可以给我一些示例代码......我用示例代码快速理解事物......谢谢!

Mat*_*ggs 5

ruby中的模块可用于3种可能的事情

1.命名空间

这很简单.

module Foo
  class Bar
  end
end

f = Foo::Bar.new
Run Code Online (Sandbox Code Playgroud)

2.功能集

有时候,你会有一些不适合任何课程的功能.在类似java的东西中,你只需将它们作为一组静态方法放在类上.在ruby中,你会将它们放在一个模块上,因为将它们放在一个类上意味着该类是为了实现的

module FooHelper
  def self.bar
    puts 'hi'
  end
end
FooHelper.bar # => hi
Run Code Online (Sandbox Code Playgroud)

混合物

这是最难理解的所有3.基本上,它是对C中的多重继承或java中的接口的回答.

有时你有逻辑属于几个类,但同时不适合作为父类.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
Run Code Online (Sandbox Code Playgroud)

mixins是一个相当高级的主题,它需要一些时间来理解你何时使用超级类.IMO它们是ruby最酷的功能之一,它处理多重继承问题,比我所看到的任何其他OO语言更优雅.