After the clarification I would also recommend and approach along the line of waiting until the binding actually tries to access an unbound variable and evaluate its value then (since the name of the variables is not actually needed for anything else)...

On 26.11.2017 19:47, Marcin Erdmann wrote:
Wouldn't it be easier for you then to implement a class which extends groovy.lang.Binding which lazy evaluates your default variables and use that as your script binding instead?

On Sun, Nov 26, 2017 at 6:26 PM, bayareagreg <bayareag...@gmail.com <mailto:bayareag...@gmail.com>> wrote:

    All right, let me explain why I need this.
    In my product, we let our users evaluate "custom" groovy
    expressions they
    construct. This is done in Java via groovy Script object. There
    are half a
    dozen "standard" product variables users can refer to in those
    expressions.
    The values of these variables are bound into Bindings object
    before the
    script is run. The values may be a String, a GPathResult, a
    java.util.Map,
    etc. The problem is that some of the variables are quite expensive to
    compute and it is a waste of time to do so if the expression does not
    reference these variables.
    For example, if the expression happens to be "${x}", I would be
    nice to only
    compute the value of x and bind it before invoking the script, not
    y, z, w,
    etc.
    That is why I was wondering if there was a simple way to get the
    list of all
    variables used in an expression. Another way to solve the problem
    would be
    some kind of "lazy evaluation" approach where we would bind all
    variables to
    some type of "proxy" object, such that the real values are only
    computed on
    "as needed" basis. I could not find an easy way to do that either.
    Some
    pointers would be very much appreciated
    Thanks in advance
    Greg



    --
    Sent from:
    http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html
    <http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html>



Reply via email to