あなたが探しているのは、Ruby 2.0 の改良点です。この機能は実験的なものであることに注意してください。
module TestParser
refine Array do
def parse_test
42
end
end
end
using TestParser # This applies only to the current file
class Check
[].parse_test #=> 42
end
Array から継承してメソッドを追加することもできます。
class TestParser < Array
def parse_test
42
end
end
arr = TestParser.new
arr.is_a? Array #=> true
arr.parse_test #=> 42
ただし、これらのいずれかを行うことは強くお勧めしません。Array をカプセル化し、必要なメソッドのみを提供するオブジェクトを作成することをお勧めします。
class TestParser
def initialize array = []
@array = array
end
def parse_test
# do stuff to @array
end
end
最後に、あなたが持っているものが機能しない理由について:
module TestParser
class Array
def parse_test; end
end
end
メソッドを持たないモジュールTestParser
とメソッドを 1 つ持つクラスTestParser::Array
( parse_test
) の 2 つを作成します。にはメソッドがないためTestParser
、別のモジュール/クラスに含めても、使用可能なメソッドには影響しません。インクルードTestParser
は では何もしませんTestParser::Array
。