假设我正在编写一个为第三方类添加功能的mixin模块。显然,我希望第三方类及其客户端可以访问一些方法和实例变量。这些构成了mixin模块的公共接口。
但我想要封装某些其他方法和实例变量。我不希望它们可以被我混入的类访问,特别是我不希望它们意外地覆盖,阴影,冲突或以其他方式干扰mixee类的方法或实例变量 - 或者那些如果第三方修改了我正在混合的类,那么当前可能存在,或者将来可能创建的那些。
我需要采取哪些预防措施,以确保我的mixin以这种方式“卫生”?
答案 0 :(得分:2)
创建一个单独的对象来封装您的功能和实例变量,并让mixin将公共可访问的方法委托给该对象。现在,您只需要将单个实例变量与对象相关联。您甚至可以通过存储{Mixee =>委托}在模块中散列并在每个混合方法的开头进行查找。
答案 1 :(得分:1)
也许您可以创建一个子模块来包含所有实用程序方法。
module Foo
module Utils
def self.answer
42
end
end
def helpme
"the answer is #{Utils.answer}"
end
end
include Foo
puts helpme