红宝石 – 何时使用模块,何时使用类

前端之家收集整理的这篇文章主要介绍了红宝石 – 何时使用模块,何时使用类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在通过Gregory Brown Ruby Best Practices的书.早期,他正在谈论从相关类的帮助方法重构一些功能,对模块的一些方法,然后模块扩展自身.

没有看到之前,一个快速的谷歌,发现扩展自己的模块让模块上定义的方法看到对方,这是有道理的.

现在,我的问题是你什么时候会这样做

module StyleParser
  extend self

  def process(text)
    ...
  end

  def style_tag?(text)
    ...
  end
end

然后在测试中引用它

@parser = Prawn::Document::Text::StyleParser

而不是像这样的东西?

class StyleParser

  def self.process(text)
    ...
  end

  def self.style_tag?(text)
    ...
  end
end

是否可以使用它作为mixin?还是有其他原因我没看到?

解决方法

应该使用一个类来进行实例化或需要跟踪状态的功能.模块可以用作将功能混合到多个类中的方式,或者作为提供不需要被实例化或跟踪状态的一次性特征的方式.后者也可以使用类方法.

考虑到这一点,我认为这个区别在于你是否真的需要上课.当您有一个需要某些单例功能的现有类时,类方法似乎更合适.如果你所做的只包括单例方法,那么将它实现为一个模块并直接通过模块访问就更有意义了.

猜你在找的Ruby相关文章