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

时间:2010-12-10 06:13:12

标签: ruby-on-rails ruby

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

2 个答案:

答案 0 :(得分:5)

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.基本上,它是对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

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

答案 1 :(得分:1)

模块是命名空间内的常量,类和函数的集合。这是一个例子:

module Payments
  CARD_TYPES = ["visa", "mastercard"]

  class CreditCard
    attr_accessor :number
    attr_accessor :type
  end

  extend self
  def process_payment
   ...
  end
end

我现在有一个付款模块。我可以调用Payments :: CARD_TYPES来获取数组;付款:: CreditCard.new创建一个对象和Payments :: process_payment来调用一个函数。