ruby - 为什么我们要把模块放在 Ruby 的类中?

标签 ruby namespaces

在 Ruby 中,我发现为了命名空间而将类放在模块中是很有用的。我还看到可以将模块放入类中。但我不明白你为什么要那样做。

模块一般都是混入类的,对吧?那么,在类中定义模块的目的是什么?

最佳答案

我们可以在编写类似猿的代码时使用它:

class DrugDealer
  module Drug
    def happy?; true; end
  end

  def approach(victim)
    victim.extend Drug
  end
end

o = Object.new
DrugDealer.new.approach(o)
o.happy? # => true

另一个在现实世界中更实用的示例是拥有仅由子类应用的混合。

当事物的某些方面适用于某些子类而其他方面适用于其他子类时,这很有用,而这些方面的应用方式没有足够的顺序来为清晰的类层次结构让路(树)。想想多重继承!一个简化的例子:

class Person
  def handshake
    :sloppy
  end

  def mind_contents
    :spam
  end

  module Proper
    def handshake
      :firm
    end
  end

  module Clever
    def mind_contents
      :theories
    end
  end
end

class Professor < Person
  include Proper
  include Clever

  # ...
end

等等。有点好,当明智地使用。甚至 super 调用和构造函数(虽然我没有在这里定义)也按照我希望的方式流经所有混合宏和类。

关于ruby - 为什么我们要把模块放在 Ruby 的类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544111/

相关文章:

ruby-on-rails - Ruby 我怎样才能在给定日期之后获得星期一的日期

ruby - 捕获操作的真/假结果

r - 如何在我自己的函数中使用给定包的内部函数

c++ - 如何将枚举导入 C++ 中的不同命名空间?

C++ 唯一类名与命名空间

ruby - 删除文件中的行 - Ruby

ruby-on-rails - 事件记录 :includes - how to use map with loaded associations?

php - 在 PHP 中使用命名空间

c# - 每个程序集一个命名空间?

ruby - 变量赋值 "x, = 1,2"在 Ruby 中如何工作?