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

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

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

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

  1. module StyleParser
  2. extend self
  3.  
  4. def process(text)
  5. ...
  6. end
  7.  
  8. def style_tag?(text)
  9. ...
  10. end
  11. end

然后在测试中引用它

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

而不是像这样的东西?

  1. class StyleParser
  2.  
  3. def self.process(text)
  4. ...
  5. end
  6.  
  7. def self.style_tag?(text)
  8. ...
  9. end
  10. end

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

解决方法

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

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

猜你在找的Ruby相关文章