groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gerald Wiltse <jerrywil...@gmail.com>
Subject Re: Methods for Creating Ranges
Date Wed, 20 Apr 2016 05:57:42 GMT
Also, thank you so very much for the response!

Gerald R. Wiltse
jerrywiltse@gmail.com


On Wed, Apr 20, 2016 at 1:57 AM, Gerald Wiltse <jerrywiltse@gmail.com>
wrote:

> 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
> jerrywiltse@gmail.com
>
>
> On Wed, Apr 20, 2016 at 1:48 AM, Guillaume Laforge <glaforge@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 <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 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
>>>>> jerrywiltse@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>
>>
>
>

Mime
View raw message