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 >>>> >>>>