假设我有一个假设的宝石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
以外的其他内容?
答案 0 :(得分:1)
别名是我唯一真正的选择吗?
是的,如果要打开并直接修改类。但是,更好的选择是不打开第三方类并对它们进行猴子修补。您应该使用继承或组合:构建自己的包装AwesomeClass
实例的类,提供自己的cool_method
,调用AwesomeClass
方法以及您需要的任何其他功能。