問題タブ [mvel]
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.
java - MVEL 演算子のオーバーロード
MVEL を使用すると、パーサー コンテキストにカスタム関数を簡単に提供できますが、演算子の評価方法をオーバーロードする「公式の」方法があるかどうかは明らかではありません。2 つの具体的な使用例を念頭に置いています。
配列に対して算術演算を実行するには、次のように、操作を配列の各要素にマップする必要があります。
[1, 2, 3] + 1 == [2, 3, 4]null オペランドを使用する操作は、次のよう
#N/Aに (Excel のように) null と評価される必要があります。1 + null == null
これに対する「公式の」解決策がない場合、これを実現するために MVEL にハッキングする明白な方法はありますか?
eclipse - 複数の条件を持つ MVEL 式
MVEL 式を機能させようとしていますが、問題があります。プロパティとして定義された日付が他の2つの日付の間にあるかどうかを判断しようとしています。
したがって、この場合、ExistingStartDate = 3/6/14、current_period_start_date = 3/3/14、current_period_end_date = 3/16/14 です。
私はこれが真実であることを期待しています。私の構文に何か問題があるに違いないと感じています。どんな助けでも大歓迎です!
java - マップ内の各要素の drools mvel
drools の禁止事項の 1 つは、結果 (then 句) でコレクションを手動で反復処理することです。マップ内の各キーと値のペアに対して何かを実行しながら、マップを効果的に反復する drool を作成する必要があります。つまり、for-each ループを実際に記述せずに、for-each ループの動作を drools で複製する必要があります。
ここで、結果に for-each ループを記述できることに気付きました。コードを可能な限り drools-standard に近づけたいと考えています。以下に、より具体的な例を示します。
文字列と色のマップがあります。
マップ内のすべての色について、別のコレクションをチェックして、その色の正確なコードを見つけたいと考えています。
Java 方言のアプローチは、次のようなものになります。
drools 方言を使用して同様のことを行うにはどうすればよいでしょうか?
更新: この問題について考えれば考えるほど、よだれのコンテキストでこの種のマップ検索/反復を行うべきではないことが懸念されます。代わりに、これらのコレクションのファクト オブジェクト表現をワーキング メモリに挿入するのが正しい方法かもしれません。たとえば、Color がラップされた colorFact と、色の名前を示すフィールドで各色をラップする場合があります。コードと同じです。次に、次の行に沿ってよだれを書くことができます。
これが最善の方法であるとすれば、追加しなければならない膨大な数の事実が心配です。私はすでに何千も持っています。これにより、さらに数万が作成されます。記憶力も心配ありません。むしろ、これらすべてのコレクションを繰り返し処理し、それらの要素を作業メモリに追加するのに必要な時間が心配です。これがこれを行うための最良の方法であるか、またはより良い方法が存在するかについて、誰かコメントできますか?
javascript - エラスティックサーチ クエリでスクリプト フィルタを使用すると、いくつかのクエリの後に IllegalAccessError が発生する
ユーザーが次のように見える「ユーザー」elasticsearchインデックスがあります。
「時間」フィールドに現地時間の現在の時間が含まれているすべてのユーザーを検索したいと考えています。たとえば、オランダで 8.00 ~ 12.00 または 20.00 ~ 23.00 のときに上記のユーザーを検索したいだけです。
これに対する私の解決策は、スクリプト フィルターを使用することです。これを MVEL で実装する方法がわからなかったので、javascript プラグインをインストールしました。今、私のクエリは次のようになります。
したがって、これは機能しますが、しばらくすると、elasticsearch が次のように例外をスローし始めます。
}
同様の問題が投稿され、JIT コンパイラの問題であることが示唆されました。回避策として、「-Dmvel2.disable.jit=true」を使用して無効にすることが提案されました。/etc/default/elasticsearch の ES_JAVA_OPTS に入れてこれを試しましたが、効果がないようです。
何が問題なのか、それを修正する方法、またはこのクエリを実行する別の方法を知っている人はいますか?
lambda - MVEL Lambda と厳密モードの型付けにおけるクロージャー
厳格なモードで MVEL を使用しようとしましたが、エラーが発生し、理由がわかりません!
これが私のユニタリテストです:
エラーは次のとおりです。
バグ?
java - この drl はコンパイルする必要がありますか?
プロモーション エンジン システム用に Drools 5.5 を実行するプロジェクトに取り組んでいます。KnowledgeBase を構築しているときに、コンパイルの手順を理解するのに苦労しています。
これはケースです: 条件サイズ >= int のリストで収集 (LHS) を実行する drl があります。drl を生成するシステムが間違っていたため、ランタイム例外が発生しています。今、私はコンパイルがこの場合のよだれに対してどのように機能するかを理解しようとしています。
問題は、この収集では、制約 (size >= something 、something は整数ではない) が drools 5.5 コンパイラーによって検証されず、例外は実行時にのみ爆発することです。
しかし、同じコードが drools 5.0.0 で検証されており、KnowledgeBase の作成前にこのルールを削除できました。
それがバグなのか、Drools の LHS を理解していないだけなのかはわかりません。
とにかく、これは私が取り組んでいる検証ステップです
java - レベル評価
問題文: 式(a + b + c)があり、その値を計算して変数に代入したいとします。後で、その変数値を他のロジックで使用したいと思います。これはすべて MVEL を通じて行われます。問題は、外部の誰かが である場合(a,b,c)、nullMVEL が文字列形式で評価されることです。
これを避けるために、各オブジェクトを渡す独自の関数を作成し、null の場合はゼロにします。
以下のサンプルコード
出力
ここの値を取得できません"d"。ファクトリと null チェック関数を削除すると、動作して の値を取得できます"d"。しかし、MVEL はこれを処理できないため、算術演算に対しては null セーフにする必要があります。
また(null * 23)、MVEL は として返しますfalse。