1

私はここで私が欲しいものの非常に良い例を見つけました:

ここに画像の説明を入力してください

基本的には、文字列を式を使用したGroovyスクリプトとして実行できるようにするためですが、条件がfalseの場合は、falseと評価された理由に関する詳細情報を表示したいと思います。

編集

このように機能するユーティリティメソッドが必要です。

def expression = "model.book.title == \"The Shining\""
def output = magicMethod(expression)

// output.result: the exact result of executing expression
// output.detail: could be a string telling me why this expression returns true or false, similar to de image

Eval.me+assertと、詳細を取得するために例外をキャッチすることの組み合わせかもしれないと思います

4

1 に答える 1

1

ええ、それはアサートで動作します。@ジャスティン・パイパーのアイデアに感謝します

ここにスニペットがあります:

def model = [model:[book:[title:"The Shinning"]]]

def magicMethod= { String exp ->
    def out = [:]
    out.result = Eval.x(model,"x.with{${exp}}")
    try{
        if(out.result){
            Eval.x(model,"x.with{!assert ${exp}}")
        }else{
            Eval.x(model,"x.with{assert ${exp}}")
        }
    }catch(Throwable e){
        out.detail = e.getMessage()
    }
    return out
}


def expression = "model.book.title == \"The Shining\""
def output = magicMethod(expression)

println "result: ${output.result}"
println "detail: ${output.detail}"
于 2012-10-23T18:04:01.670 に答える