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 jerrywil...@gmail.com On Wed, Apr 20, 2016 at 1:26 AM, Gerald Wiltse <jerrywil...@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 > jerrywil...@gmail.com > > > On Wed, Apr 20, 2016 at 1:15 AM, Guillaume Laforge <glafo...@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 <jerrywil...@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 v = "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 >>> jerrywil...@gmail.com >>> >>> >> >> -- >> Guillaume Laforge >> Apache Groovy committer & PMC Vice-President >> Product Ninja & Advocate at Restlet <http://restlet.com> >> >> Blog: http://glaforge.appspot.com/ >> Social: @glaforge <http://twitter.com/glaforge> / Google+ >> <https://plus.google.com/u/0/114130972232398734985/posts> >> >> >