If those strings come from the outside, then using eval on them is a no-no. Consider what happens if your input string is "${System.exit(1)}" or "${Shell.run('rm -rf /')}". Only use eval on sanitized input and only if there is no simpler way.
On 20 April 2016 at 09:32, Guillaume Laforge <glafo...@gmail.com> wrote: > Eval.x(v) should just work as well. > > Regarding resources / performance, it means spinning the parser and > compiler, so it's not for free. Doing your own string parsing logic might > be more efficient. > Depends on how frequently you have to do that. > Le 20 avr. 2016 07:57, "Gerald Wiltse" <jerrywil...@gmail.com> a écrit : > >> 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> >>> >> >>