ruby-on-rails - 我可以总结一下 Ruby 模块的作用吗?

标签 ruby-on-rails ruby

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

最佳答案

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/

相关文章:

ruby-on-rails - 在两个日期时间之间迭代,步长为一小时

ruby-on-rails - 无法从 gem (Twilio-ruby) 调用方法,似乎正在我的 Controller 中查找,如何正确确定其范围?

ruby-on-rails - 我如何让 searchlogic 与 Rails 3 一起工作?

带字符串的 ruby​​ case 语句不起作用(如预期)

ruby - 在某些情况下是否可以告诉 ruby​​ 接受左手变量?

ruby-on-rails - Rails 3 I18 : translation missing: da. datetime.distance_in_words.about_x_hours

ruby-on-rails - rails 3.1 引擎和数据库

mysql - Active Record 第三层关系查询

mysql - 如果我有很多用户、帖子、喜欢,如何组织对数据库的查询

ruby-on-rails - 为什么我可以使用 irb 的 RMagick 而不是 rails 控制台?