[stringtemplate-interest] [ST4] How to avoid map key iteration?

Sam Harwell sharwell at pixelminegames.com
Sun Feb 13 09:09:10 PST 2011


If you write it this way:

 

t2(adr,line2={<adr.zip> <adr.city>}) ::= <<

<adr.firstname> <adr.lastname>

<line2>

>> 

 

Then you can do this:

 

<t2(adr=p,line2={<adr.city>, <a.zip>})>

 

Sam

 

From: stringtemplate-interest-bounces at antlr.org
[mailto:stringtemplate-interest-bounces at antlr.org] On Behalf Of Udo
Borkowski
Sent: Sunday, February 13, 2011 3:09 AM
To: Terence Parr
Cc: stringtemplate-interest List
Subject: Re: [stringtemplate-interest] [ST4] How to avoid map key iteration?

 

Hi Ter,





Hi. my first thought is, don't try to iterate over the object.  

...

<adr:{t|<t.zip> <t.city>}>

:-)

 

OK, I was trying to make the example as simple as possible, just to show my
case. Of cause this simple example could be written as you suggest.

 

My point is: when writing:

 

    <adr:{t|<t.zip> <t.city>}>

 

I don't want to "iterate" over the object but rather pass an argument to the
anonymous templates. The "iterate" happens accidently, just because adr also
is iterable.

 

 

Here the more complete example:

 

Assume we have this template:

 

    t1(adr) ::= <<

    <adr.firstname> <adr.lastname>

    <adr.zip> <adr.city>

    >>

 

With my "bean style" model object I get a result like this:

 

    ---------

    Joe Smith

    12345 Somecity

   ---------

 

Most times the format "zip city" is OK. However sometimes it needs to be
formatted differently.Therefore I make the second line a parameter with the
common case as the default:

 

    t2(adr,line2={<adr:{a|<a.zip> <a.city>}>}) ::= <<

    <adr.firstname> <adr.lastname>

    <line2>

    >>

 

This way I can still call the template like this most of the time:

 

    <t2(adr=p)>

 

and when a different 2nd line format is needed, I pass it in:

 

    <t2(adr=p,line2={<adr:{a|<a.city>, <a.zip>}>})>

 

In this example the result would be:

 

    ----------

    Joe Smith

    Somecity, 12345

    ----------

 

This all works fine with the bean-style model object. 

 

However when I switch to a model object that extends a Map class things
break and I get an error like:

 

    no such property or can't access: java.lang.String.zip 

 

 

I hope this somewhat lengthy example make things more clearer.

 

 

I guess from a language design point of view I would provide different
constructs for the "iterate" vs. "pass argument to anonymous template" case,
e.g.

 

    <adr:{.}>  // the "iterate" case, i.e. "anything iterable" is used as an
iterator, as now

 

    <adr::{.}> // the "pass arg" case, i.e. don't handle iterables
differently, just pass in to anon template

 

 

Udo

 

 

On 11.02.2011, at 17:39, Terence Parr wrote:





Hi. my first thought is, don't try to iterate over the object.  

 

<adr.zip> <adr.city>

 

is same as:

 

<adr:{t|<t.zip> <t.city>}>

 

Ter

On Feb 11, 2011, at 5:45 AM, Udo Borkowski wrote:





Hi,

 

is there any way to prevent the "iteration" over map keys when using a
template like <m:{t|.}> (m may be a map or a simple object)?

 

Details:

 

I am using a template like this:

 

writeAddress(adr) ::= <<

...

<adr:{t|<t.zip> <t.city>}>

...

>> 

 

adr represents an "Address" with properties "street", "zip", "city" etc.

 

Initially this was implemented by a bean-style model class Address.
Everything worked as expected.

 

Now I changed the model class to a more "dynamic" implementation by using a
Map. I.e. "zip", "city", etc. are now keys in the map, mapping to their
resp. values.

 

Expressions like this:

 

<a.zip>

 

still work fine, but 

 

<adr:{t|<t.zip> <t.city>}>

 

runs into an error: 

 

no such property or can't access: java.lang.String.zip

 

This is because the new model instance "accidentally" is a Map and the
expression now iterates over the keys of the map ("zip" being the first).

 

How can this iteration be avoided?

 

 

Udo

 

 

_______________________________________________
stringtemplate-interest mailing list
stringtemplate-interest at antlr.org
http://www.antlr.org/mailman/listinfo/stringtemplate-interest

 

_______________________________________________
stringtemplate-interest mailing list
stringtemplate-interest at antlr.org
http://www.antlr.org/mailman/listinfo/stringtemplate-interest

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/stringtemplate-interest/attachments/20110213/9299f7dd/attachment-0001.html 


More information about the stringtemplate-interest mailing list