我如何编写卫生的Ruby mixin?

Joh*_*ohn 5 ruby mixins hygiene

假设我正在编写一个mixin模块,可以为第三方类添加功能.显然,我希望第三方类及其客户端可以访问一些方法和实例变量.这些构成了mixin模块的公共接口.

但我想要封装某些其他方法和实例变量.我不希望它们被我混入的类访问,特别是我不希望它们意外地覆盖,阴影,冲突或以其他方式干扰mixee类的方法或实例变量 - 这些如果第三方修改我正在混合的类,那么当前可能存在,或者将来可能创建的那些.

我需要采取哪些预防措施,以确保我的mixin以这种方式"卫生"?

ram*_*ion 2

创建一个单独的对象来封装您的功能和实例变量,并让 mixin 将可公开访问的方法委托给该对象。现在您只需将一个实例变量与您的对象关联起来。您甚至可以通过在模块中存储 {Mixee => Delegate} 哈希并在每个混合方法的开头进行查找来避免这种情况。