扩展gem中定义的类

时间:2017-02-15 12:17:18

标签: ruby metaprogramming

假设我有一个假设的宝石my_gem,它定义了类AwesomeClass,宝石包含一个仅 工作于AwesomeClass的二进制文件,但加载我的lib/目录中的任何代码。我想干净地扩展一些类的方法,有时称为super

让我们说它看起来像这样:

    class AwesomeClass
      def cool_method
       ...
      end
    end

在这里,在我的库代码中,我想做类似的事情:

    AwesomeClass.class_eval
      def cool_method
       (call the original method here)
       ...
      end
    end

你会怎么做? alias是我唯一真正的选择吗?我错过了一些更好的方式吗?除class_eval以外的其他内容?

1 个答案:

答案 0 :(得分:1)

  

别名是我唯一真正的选择吗?

是的,如果要打开并直接修改类。但是,更好的选择是打开第三方类并对它们进行猴子修补。您应该使用继承或组合:构建自己的包装AwesomeClass实例的类,提供自己的cool_method,调用AwesomeClass方法以及您需要的任何其他功能。