代码之家  ›  专栏  ›  技术社区  ›  John

如何编写一个健康的Ruby mixin?

  •  5
  • John  · 技术社区  · 17 年前

    但我希望封装某些其他方法和实例变量。我不希望它们对我正在混合的类是可访问的,特别是我不希望它们意外地重写、隐藏、冲突或以其他方式干扰mixee类的方法或实例变量——无论是当前存在的方法还是实例变量,或者,如果第三方修改了我正在混合的类,那么将来可能会创建这些类。

    我需要采取什么预防措施,如果有的话,以确保我的混合是“卫生”的方式?

    2 回复  |  直到 17 年前
        1
  •  2
  •   rampion    17 年前

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

        2
  •  1
  •   glenn jackman    17 年前

    也许您可以创建一个子模块来包含所有实用程序方法。

    module Foo
      module Utils
        def self.answer
          42
        end
      end
      def helpme
        "the answer is #{Utils.answer}"
      end
    end
    include Foo
    puts helpme
    
    推荐文章