0

Rubyistsと話すときはいつでも、とについて素晴らしいことを聞きmethod_addedますmethod_missing。しかし、私は最近、プロジェクトで両方を使用したことで叱られました。議論は、別のライブラリ(たとえば、rspecなど)もメソッドをオーバーロードし、method_missing最初に呼び出されたバージョンに応じてプログラムを奇妙な状態にする可能性があるというものでした。

これがどのくらいの頻度で発生するのか知りたいです。過負荷になるのは本当に危険method_missingですか?method_missing紛争から生じる悲惨な例を実際に持っている人はいますか?

4

1 に答える 1

4

method_missingクラスを(再)定義すると、このメソッドの以前の実装(たとえば、Gemから)が置き換えられることに注意してください。これを回避するには、method_missingを使用して拡張するクラスから継承する新しいクラスを作成します。

ただし、ほとんどのGemsには独自のクラスがあるため、これは通常問題にはなりません。

覚えておくべきもう1つのことは、メソッド呼び出しチェーンを壊さないように、常にsuper最後に 呼び出すことです。method_missing

def method_missing(m, *args, &block)
  # your code...

  super
end

たぶん、 Rubyメソッドルックアップフローのこのグラフィックも役立ちます。

于 2012-06-27T06:10:08.627 に答える