For a GString, the strings property contains the static parts and the
values property contains the expressions.

def name = 'world'
def gstr = "Hello, $name!"
assert gstr.strings[0] == 'Hello, '
assert gstr.strings[1] == '!'
assert gstr.values[0] == 'world'
assert gstr.toString() == 'Hello, world!'

Your code is just concatenating the static parts. You can just use the
toString() value or in general if you wanted to concatenate by hand
strings[0] + values[0] + strings[1] + values[1] + strings[2] +
values[2] + strings[3] and so forth for as many terms as needed.

Another example:

def gstr = "foo ${1+1} bar ${'w' * 3} baz"
assert gstr.strings == ['foo ', ' bar ', ' baz']
assert gstr.values == [2, 'www']
assert gstr.toString() == 'foo 2 bar www baz'

On Wed, Sep 27, 2023 at 9:45 PM Jochen Wiedmann <joc...@apache.org> wrote:
>
>
> Hi, Paul,
>
> could you, please, explain what you mean? I really have no idea, what you 
> mean.
>
> Thanks,
>
> Jochen
>
>
> On 2023/09/25 15:07:28 Paul King wrote:
> > You'd need to interleave the values from the GString.
> >
> > On Tue, Sep 26, 2023 at 12:43 AM Jochen Wiedmann
> > <jochen.wiedm...@gmail.com> wrote:
> > >
> > > Hi,
> > >
> > > can anyone advise me, what is wrong with the following code: I'd
> > > expect it to write out the word "Okay". Instead, it throws the
> > > exception "Unexpected result: Hello, !"
> > >
> > > final String scriptStr = "return \"Hello, $name!\";";
> > > final GroovyShell gs = new GroovyShell();
> > > final Script script = gs.parse(new StringReader(scriptStr));
> > >
> > > final Binding binding = new Binding();
> > > binding.setProperty("name", "world");
> > > script.setBinding(binding);
> > >
> > > final GStringImpl gsi = (GStringImpl) script.run();
> > > final String[] gsArray = gsi.getStrings();
> > > final String result;
> > >
> > > if (gsArray == null || gsArray.length == 0) {
> > >     result = null;
> > > } else {
> > >     result = String.join("", gsArray);
> > > }
> > >
> > > if (!"Hello, world!".equals(result)) {
> > >     throw new IllegalStateException("Unexpected result: " + result);
> > > }
> > > System.out.println("Okay.");
> > >
> > >
> > >
> > > --
> > > The woman was born in a full-blown thunderstorm. She probably told it
> > > to be quiet. It probably did. (Robert Jordan, Winter's heart)
> >

Reply via email to