Wow, i just wrote that exact code basically... and started responding to your email, but there were various drawbacks to this approach as I don't want to have to define handling of every property by name... Then... it hit me...
def v = '1..10' assert new GroovyShell().parse(v).run() == [1,2,3,4,5] It works!!! Something about the Eval works just a little bit differently than GroovyShell i guess. Perhaps Dierk can explain. Last question, how expensive is this invocation of groovyshell and parse and all that (resources wise)? So-so? Gerald R. Wiltse jerrywil...@gmail.com On Wed, Apr 20, 2016 at 1:48 AM, Guillaume Laforge <glafo...@gmail.com> wrote: > If you know it's a range when parsing that string, you can do this, with > the toInteger() method: > > def rangeString = "123..455" > def (String min, String max) = rangeString.tokenize("..") > def range = min.toInteger()..max.toInteger() > > On Wed, Apr 20, 2016 at 7: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> >>> >>> >> > > > -- > 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> >