gra*_*tur 4 ruby monkeypatching
我在我的代码中进行了大量的数组求和,所以我想要修补Array类以包含sum方法(它对数组中的所有元素求和):
class Array
def sum
self.inject{ |s, t| s + t }
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我以前从来没有在共享代码中修补任何东西,我怀疑这是一个"安全"的事情(例如,也许其他人已经定义了一个sum方法Array).
那么什么是能够在我正在编写的代码中对数组求和的最佳方法,而不必arr.inject{ |s, t| s + t }每次都写入?猴子补丁有安全的方法吗?我能以某种方式使用模块吗?或者我应该在某个地方编写一个辅助方法,它接收一个数组并返回总和(即def sum_array(arr); return arr.inject{ |s, t| s + t }; end)?(或者还有其他一些方法吗?)
inject实际上可以采用符号参数,所以你真正需要编写的是arr.inject(:+),我认为并不需要更短的形式.
http://www.ruby-doc.org/core/classes/Enumerable.html#M001494