で定義されたクラスを拡張するのは、私はクラスAwesomeClass
を定義する仮想的な宝石、my_gem
を、持っている、と宝石がAwesomeClass
上のみ動作するバイナリが含まれていますが、は私の中に任意のコードをロードしますと言ってみましょうlib/
ディレクトリ。クラスのメソッドのいくつかをきれいに拡張したいときは、super
と同等のものを呼び出すことがあります。宝石
のは、それは次のようになりましょう:
AwesomeClass.class_eval
def cool_method
(call the original method here)
...
end
end
あなたはそれをどのようにします:
class AwesomeClass
def cool_method
...
end
end
そしてこちらに、マイライブラリのコードで、私のような何かをしたいですか? alias
は私の本当の選択ですか?私が行方不明のいくつかのより良い方法がありますか? class_eval
以外のもの?
宝石が「AwesomeClass」だけを望んでいて、自分のものではないとすれば、それはどのように働くのでしょうか? –
@DanielBoganそして、GemはRubyのタイプシステムが動作する方法ではないので、間違って構築されています。オブジェクトが 'AwesomeClass'と同じメソッド呼び出しをサポートしている限り、宝石はそれを拒否できません。 – meagar
ええ、それは理にかなっています。さて、ラド、ありがとう! –