Ruby Language
RubyでのMonkey Patching
サーチ…
備考
便利だが、猿のパッチはすぐには分からない落とし穴がある。特に、この例のようなパッチは、グローバルスコープを汚染します。 2つのモジュールが両方ともHash#symbolize
追加した場合、最後に必要なモジュールだけが実際に変更を適用します。残りは消去されます。
さらに、パッチされたメソッドにエラーがある場合、stacktraceは単にパッチされたクラスを指しています。これは、 Hash
クラス自体にバグが存在することを意味します(現在はそこにあります)。
最後に、Rubyは保持するコンテナに非常に柔軟性があるため、メソッドを書くときに非常に単純なように見えますが、多くの未定義の機能があります。たとえば、 Array#sum
を作成すると、数値の配列には適していますが、カスタムクラスの配列が与えられたときにブレークします。
より安全な代替手段は、Ruby> = 2.0で利用可能な洗練です。
機能の追加
Rubyの任意のクラスにメソッドを組み込むことができます。呼び出し元オブジェクトはself
を使用して参照されます。
class Fixnum
def plus_one
self + 1
end
def plus(num)
self + num
end
def concat_one
self.to_s + '1'
end
end
1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow