Ruby 模块与命名空间的高级应用
1. 用 Mixins 模拟多重继承
在 Ruby 中,一个类只能有一个超类,但可以包含任意数量的模块,这些模块被称为 Mixins。如果编写的代码可以为通用类添加功能,应该将其放入 Mixin 模块而不是类中。只有那些需要独立实例化和使用的对象才需要定义为类(模块不能被实例化)。
以下是一个使用 TaggableString 的示例:
s = TaggableString.new('It was the best of times, it was the worst of times.')
s.add_tag 'dickens'
s.add_tag 'quotation'
s.tags # => #<Set: {"dickens", "quotation"}>
当一个类使用 include 关键字包含一个模块时,模块的所有方法和常量都可以在该类中使用。这些方法不是被复制,而是类会感知到模块的方法。如果模块的方法在后续(甚至在运行时)发生更改,包含该模块的所有类的方法也会相应更改。
然而,模块和类在定义 initialize 方法时可能会有问题。例如, Taggable 模块定义了一个无参数的 taggable_setup 方法,而 TaggableString 的超类
Ruby模块与命名空间高级应用解析
超级会员免费看
订阅专栏 解锁全文
2040

被折叠的 条评论
为什么被折叠?



