Here is my current loop btw, it just bombs on the range, says its a string. 

        taskProps.each { k, v ->
            String tmpKey = k.replaceAll('system.', '').toLowerCase().replaceAll('\\.','')
            if (this.hasProperty(tmpKey)) {
                this."$tmpKey" =  Eval.x(v, "return x")
            }
        }



Gerald R. Wiltse
jerrywiltse@gmail.com


On Wed, Apr 20, 2016 at 1:26 AM, Gerald Wiltse <jerrywiltse@gmail.com> wrote:
I don't see how that works in my case, maybe i'm missing something. 

I will clarify: 

I define a variable in web to represent the range:   14502..14520

The web converts this to a string, and passes it into my code. 

My code then has to receive this string, and then construct a list from it. 

I could do: 

String rangeString = passedInVar
(String min, String max) = rangeString.tokenize("..")
Range range = min..max

But i was hoping for a universal "caster" loop which can detect and cast the common types from strings: 
Integers, lists, ranges, maps, booleans..

12345
["this", "is", "Sample", "List"]
14502..14520
["key":"value","for":"maps"]
true

I think eval works for all but ranges. 






Gerald R. Wiltse
jerrywiltse@gmail.com


On Wed, Apr 20, 2016 at 1:15 AM, Guillaume Laforge <glaforge@gmail.com> wrote:
Hi,

You can just replace the bounds with variables.

def a = 1
def b = 10
def r = a..b

Isn't that what you're looking for?

Guillaume


Le mercredi 20 avril 2016, Gerald Wiltse <jerrywiltse@gmail.com> a écrit :
I can find no examples of different ways to create a range.  There's a plethora of examples on what you can do when you start by creating a range like so:  "1..10"

But, how does one create a range when the min and max values are stored in variables?  There's no range constructor.  I see that it's a form of a list, but I see no helper methods for dynamically creating ranges given a min and max value. 

I even tried to get really fancy, but this evaluates to a string. 

def "10..15"
assert Eval.x(v"return x").getClass().name == "​​​​​​​​​​​java.lang.String"

My use case is this.  I populate a bunch of form fields with variable definitions... but they all get passed to my code as strings. But I want to pass port ranges and lists and maps. So, the Eval() method is exactly what I needed.. it just isn't working for ranges. 

Regards,
Jerry


Gerald R. Wiltse
jerrywiltse@gmail.com



--
Guillaume Laforge
Apache Groovy committer & PMC Vice-President
Product Ninja & Advocate at Restlet