監視システムの場合、ブール式で表されるカスタム チェックを評価する必要があります。たとえば、単純な疑似コード条件があります (より複雑になる可能性があります)。
if (webservice is unavailable) and (there are no emails about planned downtime)
可能であれば、ここで短絡評価を使用したいと思います。これにより、Web サービスが利用可能である (そして最初の条件が であるfalse
) 場合、2 番目の部分は評価されませfalse
ん。これにより、不要なメール サーバーへの接続 (およびその他の時間のかかる操作) を回避できます。
これが私が達成しようとしているものの例です:
class WebserviceDownCheck {
boolean check() {
println 'Checking webservice'
return false
}
}
class NoDowntimeEmailCheck {
boolean check() { //shouldn't be executed
println 'Checking emails'
return true
}
}
//using string evaluation, because conditions are constructed during runtime
Eval.me("${new WebserviceDownCheck().check()} && ${new NoDowntimeEmailCheck().check()}")
出力は次のとおりです。
Checking webservice
Checking emails //shouldn't be there
Result: false
NoDowntimeEmailCheck().check()
最初の条件はすでに であるため、実行しないでくださいfalse
。私はもう試した:
GroovyShell
の代わりに使用Eval
check()
フィールドへのメソッドの変更と@Lazy
変換の適用${new WebserviceDownCheck().check()}
への変更(ここで${ -> new WebserviceDownCheck().check()}
見た)
(または) が既に実行されているGString
間に初期化できるようにする遅延メカニズムが必要なようです。怠け者のようなものかもしれません。Eval
GroovyShell
Binding
GroovyShell
カスタムの文字列評価ロジックを書かなくてもなんとかなるのだろうか?