我正在浏览 Facets API 并选择一些方法来包含在我的优化兼容补丁库中。
我在尝试修补内核时遇到了麻烦。它是一个模块,而我修补的其他东西是类(字符串、数组等)
这是无法使用我的核心类标准方法进行改进的证明:
module Patch
refine Kernel do
def patched?
true
end
end
end
# TypeError: wrong argument type Module (expected Class)
# from (pry):16:in `refine'
我还尝试将内核模块包装在一个类中,并将对内核的全局引用更改为该类。
class MyKernel
include Kernel
extend Kernel
end
# not sure if Object::Kernel is really the global reference
Object::Kernel = MyKernel
module Patch
refine MyKernel do
def patched?
true
end
end
end
class Test
using Patch
patched?
end
# NoMethodError: undefined method `patched?' for Test:Class
# from (pry):15:in `<class:Test>'
在这种情况下,我可以通过将 Kernel 替换为 Object 来成功获得相同的功能:
module Patch
refine Object do
def patched?
true
end
end
end
class Test
using Patch
patched?
end
但我不确定我是否可以与其他核心模块(例如 Enumerable)获得这种等效性。