加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:06:52 所属栏目:百科 来源:网络整理
导读:我正在通过Gregory Brown Ruby Best Practices的书.早期,他正在谈论从相关类的帮助方法重构一些功能,对模块的一些方法,然后模块扩展自身. 没有看到之前,一个快速的谷歌,发现扩展自己的模块让模块上定义的方法看到对方,这是有道理的. 现在,我的问题是你什么时
我正在通过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?还是有其他原因我没看到?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读