2013-02-18 86 views
2

您是否在执行此操作时看到任何缺点(除了使用猴子修补的明显问题)?使用+运算符合并哈希

class Hash 
    def +(other) 
    self.merge(other) 
    end 
end 

我发现这非常方便,但也许有一些我不考虑,可能会有问题。

+1

用全新的方法修补标准的ruby库,你可能永远不会遇到ruby核心的问题。那很好。另一方面,如果你依赖第三方库,你有机会偶尔在加入9001st off-site gem/lib的时候卡住。在这种情况下,你几乎不会明白为什么仅仅一个_3rd-party-n-graph-parser_无法正常工作。但我能想象的唯一情况是,外部库将使用'respond_to? :+'来区分大量类的实例,而不是巨大的'case'子句。 – mudasobwa 2013-02-18 06:43:05

回答

3

我没有看到任何主要缺点。一个非常小的缺点是它为调用堆栈增加了一个额外的级别,使其稍微慢一些。为了避免这种情况,你可以使用别名:

class Hash 
    alias :+ :merge 
end 

的好处可能是,你将能够使用+=语法糖,但如果你想使用+=,而不是merge!我想不出用例的。它们之间的区别在于对象ID是否更改。

+0

谢谢,我改变了实现使用别名 – Mauricio 2013-02-18 06:20:58