Hi Jim,

If your switch hits "English" it will also set the rest of the cases. You
need a "break" after "containsEnglish = true" - just like in Java


Med venlig hilsen,
Søren Berg Glasius

Hedevej 1, Gl. Rye, 8680 Ry
Mobile: +45 40 44 91 88
--- Press ESC once to quit - twice to save the changes.


Den søn. 5. mar. 2023 kl. 09.37 skrev James McMahon <jsmcmah...@gmail.com>:

> Was trying to come up with a Groovy way to collapse a lengthy switch
> statement to dynamically building the variable name. I've failed at that.
> Instead, I've fallen back on this option:
>
>      switch("$k") {
>                case "English":
>                     containsEnglish = true
>                case "Spanish":
>                     containsSpanish = true
>                case "French":
>                     containsFrench = true
>                case "Japanese":
>                     containsJapanese = true
>                case "German":
>                     containsGerman = true
>                .
>                .
>                .
>                default:
>                     break
>           }
>
> I initialize each of my "containsXYZ" variables to false at the beginning
> of my Groovy script. It works well, though it seems to lack elegance and
> brevity to me.
>
> Thanks again.
> Jim
>
> On Sat, Mar 4, 2023 at 5:10 PM James McMahon <jsmcmah...@gmail.com> wrote:
>
>> Søren  ,
>> May I ask you a follow up? I am trying what I thought I read in your
>> reply (thank you for that, by the way). But I continue to get this error:
>> "The LHS of an assignment should be a variable or a field accessing
>> expression @ ...."
>>
>> This is what I currently have, attempting to set my variable name to
>> include the key drawn from my Groovy map. How must I change this to get it
>> to work?
>>
>>      mapLanguages.each { k, x ->
>>           log.warn('mapLanguages entry is this: {} {}', ["$k", "$x"] as
>> Object[])
>>           x.each {
>>                languageChar -> log.warn('language char in {} is this:
>> {}', ["$k", "$languageChar"] as Object[])
>>           }
>>           "contains${k}" = true
>>      }
>>
>> Many thanks again,
>> Jim
>>
>> On Thu, Feb 23, 2023 at 3:01 AM Søren Berg Glasius <soe...@glasius.dk>
>> wrote:
>>
>>> Hi Jim,
>>>
>>> It is possible:
>>>
>>> languages = ['english', 'french', 'spanish']
>>> englishCharsList = ['a','b']
>>> frenchCharsList = ['c','d']
>>> spanishCharsList = ['e','f']
>>>
>>> languages.each { lang ->
>>>     this."${lang}CharsList".each { ch ->
>>>         println "$lang -> $ch"
>>>     }
>>> }
>>>
>>> Check it out here:
>>> https://gwc-experiment.appspot.com/?g=groovy_3_0&codez=eJxVjkEKwyAQRfeeYhDBTZobtJtue4PShbVGBRmCY1fBu2e0ppBZDMN__38mGfRf4x3BFZ7aoU-Rgp5AL9mh7RetBpv4EgPfg8n0iFR6xuhJvxn-AmdmmX2YjYozdAwXhiIdP8zO2AAbNAEuNwE8JUSapdqaVv8F8rDyGsY2a45YEoJUowKUDbLjKqrYAZXRSNo
>>>
>>>
>>> Best regards,
>>> Søren Berg Glasius
>>>
>>> Hedevej 1, Gl. Rye, 8680 Ry
>>> Mobile: +45 40 44 91 88
>>> --- Press ESC once to quit - twice to save the changes.
>>>
>>>
>>> Den tor. 23. feb. 2023 kl. 01.52 skrev James McMahon <
>>> jsmcmah...@gmail.com>:
>>>
>>>> Good evening. I have a list named languageCharactersList. I begin my
>>>> iteration through elements in that list with this:
>>>>
>>>> languageCharactersList.eachWithIndex( it, i ->
>>>>
>>>> I hope to make this more generic, so that I can build a variable name
>>>> that points to the appropriate list, which then allows me to keep my
>>>> iteration loop generic.
>>>>
>>>> I'd like to do this:
>>>> def languages = ['english', 'french', 'spanish']
>>>> def englishCharsList = [....]
>>>> def frenchCharsList = [.....]
>>>> def spanishCharsList = [....]
>>>>
>>>> I'll set up an iterator to grab each of the languages. Within that
>>>> iterative loop I will set a general variable like so:
>>>> def CharsList = "english"+"CharsList" (then "french", then
>>>> "spanish",.....)
>>>>
>>>> I was hoping I could then set up the generic iterator like so:
>>>> *"$CharsList"*.eachWithIndex{ it, i ->
>>>> or like so
>>>> *$CharsList*.eachWithIndex{ it, i ->
>>>>
>>>> But Groovy doesn't allow this approach, and throws a stack trace.
>>>>
>>>> How can we employ a variable assignment in that list iterator statement
>>>> so it can be generalized?
>>>>
>>>> Thanks in advance.
>>>> Jim
>>>>
>>>>

Reply via email to