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 などの他のコア モジュールでこの同等性を得ることができるかどうかはわかりません。