4
Rubyはmethod_missing
、Pythonはgetattr
です。 Booはメソッド呼び出しを傍受するために使用できるものを提供していますか?Booでメソッド呼び出しを傍受するにはどうしたらいいですか?
Rubyはmethod_missing
、Pythonはgetattr
です。 Booはメソッド呼び出しを傍受するために使用できるものを提供していますか?Booでメソッド呼び出しを傍受するにはどうしたらいいですか?
はい、ブーはIQuackFuです。
QuackGet
:あなたはQuackSet
が呼び出されるプロパティの値を取得するときにQuackInvoke
プロパティ値を設定するときに呼び出される:呼び出さ 基本的には、次の3つのメソッドを持っている、IQuackFu
を実装しますメソッドを呼び出すとき
ここはan exampleです。
小さな質問:Booは他のオブジェクトのメソッド呼び出しを傍受できますか? Groovyのようなものは、メタクラスを使っている。私は静的に型付けされているので、答えはノーだと思っていますが、私は確信しています。 – Geo
私はGroovyと同じようにはできないと思っていますが、IQuackFu対応のクラスを使って別のクラスをラップ/デコレートできます。あなたのIQuackFu対応クラスは、展開動作を実装するためのメソッドとプロパティの辞書を持つことができます。 –
BooはGroovyのように本当に動的ではありません。実行時にTypeの定義を変更することはできません。変数を 'duck'として宣言すると、コンパイラの魔法が本質的にそのオブジェクトに対する遅延バインディングになり、IQuackFuが利用可能ならば流れます。ブーには実際のメタクラスはありません。メタクラスのようなものを得るには、IronRubyまたはIronPythonが必要です。 –