1

私は現在、いくつかのEsperEPLクエリを機能させるのに苦労しています。クエリは次のようになります。

select a.center.distance(b.center) as delta
from pattern [
    every-distinct(a.id, b.id) (
        a=org.example.PositionEvent -> b=org.example.PositionEvent
    )
]

EPLStatementこれをviaにコンパイルしようとするとEPAdministrator.createEPL()、次の例外がスローされます。

com.espertech.esper.client.EPStatementException:ステートメントの開始中にエラーが発生しました:名前'a.center'でクラスを読み込めませんでした。インポートを確認してください

イベントクラスとクエリを次のように変更すると

select a.distance(b) as delta
from pattern [
    every-distinct(a.id, b.id) (
        a=org.example.PositionEvent -> b=org.example.PositionEvent
    )
]

それはうまくコンパイルされます。Esperはa.center.distance(...)、クラス名とそれに続く静的メソッド呼び出しとして解釈a.distance(...)されるようですが、オブジェクトに対するメソッド呼び出しとして解釈されますa

どうすればEsperに元のクエリを意図したとおりに解釈させることができますか(つまり、プロパティアクセスとそれに続くメソッド呼び出しとして)?

4

1 に答える 1

0

解決策は実際には単純で単純です(ただし、少し醜いです)。何かがあいまいになる可能性がある場合は、他の場所で行うのと同じように、かっこを使用します。したがって、最初のクエリを機能させるには、次のように記述します。

select (a.center).distance(b.center) as delta
from pattern [
    every-distinct(a.id, b.id) (
        a=org.example.PositionEvent -> b=org.example.PositionEvent
    )
]

この場合、括弧を追加すると、実際にはさらに少し読みやすくなります。

于 2011-04-14T21:05:59.103 に答える