問題タブ [mop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
grails - Groovy MOP Delegation をビューに接続する - StackOverflowError
私は Groovy と Grails を初めて使用し、次の記事を確認して委任に向けて作業しようとしていました: http://groovy.codehaus.org/Replace+Inheritance+with+Delegation。
Netbeans で生成されたデフォルトのビューを使用して、継承と委任の例に従うと適切なフォーム フィールドが作成されましたが、MOP の例では、ローカル変数フィールドのみが作成されました。前の例で生成されたフォームを使用すると、StackOverflowError が発生します。
ビューを MOP の例に接続するにはどうすればよいですか?
更新:ビュー、ドメイン クラス、およびコントローラー クラスの追加
ドメイン:
人:
ビュー (継承時に生成):
MOP を使用して生成されたビュー:
コントローラ クラス:
groovy - グルーヴィーな @Canonical Bean コンストラクター呼び出しに不足しているプロパティを追加しますか?
私は Groovy を初めて使用し、そのメタプログラミング機能を調べ始めたばかりです。Bean コンストラクター呼び出しで不足しているプロパティを追加することに行き詰まりました。
FactoryBuilderSupport で使用するクラスで、コンストラクターの呼び出し時にまだ定義および提供されていないプロパティを動的に追加したいと考えています。ここに簡素化されたバージョンがあります:
ただし、不明なプロパティでクラスを構築すると、プロパティは追加されませんが、MissingPropertyException
代わりに次のようになります。
プロパティの期間は存在しませんpropertyMissing
。私がグルーヴィーを理解している限り、タプル コンストラクターを呼び出すと、引数のないコンストラクターの呼び出しに続いて、グルーヴィーによって生成されたセッターが呼び出されます。では、なぜ私は を取得するのMissingPropertyException
ですか?
私は groovy に慣れていないので、基本的な AST または MOP ルールがいくつか欠けている可能性があります。ご協力をお願いいたします。
methods - Common Lisp の無名メソッド
汎用関数を変数として保存したい:
しかし、メソッドを追加するときはcall-next-method
、next-method-p
自分自身を定義する必要があります:
定義するメソッドを呼び出すにはどうすればよいcall-next-method
ですか? これを行う簡単な方法はありますか?
groovy - Groovy MOP の invokeMethod メソッドについて混乱している
まず、次の Groovy コードを見てください。
出力は次のとおりです。
Groovy メソッドのディスパッチ メカニズムによると、Car のメタクラスの invokeMethod によってインターセプトされるのではなく、Car の start メソッドを直接呼び出す必要があると思います。start メソッドが invokeMethod によってインターセプトされるのはなぜですか? オブジェクトでメソッドが呼び出されると、invokeMethod はどのように呼び出されますか?
Groovy のメソッド ディスパッチ メカニズム (MOP) について詳しく説明していただければ幸いです。
json - マップ getProperty とリスト getAt をインターセプトする方法は?
外部ソース、主に JSON をスクレイピングしています。私はnew JsonSlurper().parse(body)
それらを解析するために使用しており、のような構造を使用してそれらを操作していますdef name = json.user[0].name
。これらは外部のものであり、予告なしに変更される可能性があるため、これを検出して何らかの方法でログに記録できるようにしたいと考えています。
MOP について少し読んだ後、プロパティが見つからない場合は、マップとリストの適切なメソッドを変更してログに記録できると思いました。json
オブジェクトとそのプロパティを再帰的に実行したいだけです。問題は、私はそれを行う方法がわからないということです。
または、これをすべて達成するためのより良い方法はありますか?
[編集] たとえば、この JSON を取得した場合:
ただし、「owners」を「ownerInfo」に変更すると、上記のアクセスで NPE がスローされます。私が望むのは、アクセスを傍受して何かをすることです(特別なログに記録するなど)。より特殊な例外をスローすることもできます。
データ形式の変更ではなく、コードのバグが原因である可能性があるため、NullPointerException をキャッチしたくありません。さらに、"firstName" を "givenName" に変更しても、"owners" の名前を保持した場合、.null
ではなく値を取得するだけNPE
です。理想的には、このケースも検出したいと考えています。
また、可能であれば、if 演算子や evlis 演算子をたくさん入れたくありません。
私は実際にマップのためにそれを傍受することができました:
リストに対してそれを行う方法がまだわかりません: