Re: Using variables in an embedded Groovy script

2023-09-27 Thread Jochen Wiedmann


Thank you, using toString() works perfectly.


On 2023/09/27 12:28:24 Paul King wrote:
> 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  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
> > >  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)
> > >
> 


Re: Using variables in an embedded Groovy script

2023-09-27 Thread Paul King
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  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
> >  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)
> >


Re: Using variables in an embedded Groovy script

2023-09-27 Thread Jochen Wiedmann


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