1

$1変数を使用するブロックに降伏するメソッドをラップするエイリアスメソッドを作成するにはどうすればよいですか?

String#subより具体的には、使用する前に渡された正規表現を変更するためにモンキーパッチを適用したいと思います(はい、それは良い習慣ではないことを知っています)。

次のコードを試しましたが成功しませんでした。

class String
    alias :sub_orig :sub
    def sub(*args, &block)
        # do stuff with args
        sub_orig(*args, &block)
    end
end

次のテストは、問題が何であるかを示しています

"mark = good".sub(/(good)|(bad)/) { "very " + $1 }
TypeError: can't convert nil into String
4

1 に答える 1

1

これはあなたの質問に対する直接的な回答ではありませんが、 sub に渡されたブロックは、一致する文字列をパラメーターとして受け取ります。

"mark = good".sub(/(good)|(bad)/) { |str| "very #{ str }" }
=> "mark = very good"

あなたがやろうとしていることのより複雑な使用法を示すことができますか?

于 2013-02-16T17:06:12.947 に答える