[Zope-dev] Re: TALES idea: tuple unpacking

Evan Simpson evan@4-am.com
Wed, 30 Jul 2003 12:13:41 -0500


Jim Penny wrote:
> Well, that is exactly why it will be more confusing to everyone.  A
> python programmer is not expecting them to be different, and a
> non-programmer has no idea of what keys and indices are, much less how
> they differ.

The explanation isn't that hard, at least for a user with a basic 
knowledge of data structures -- you usually use key: with a dictionary, 
and item: with a sequence.  The exception is when you have an integer 
key in a dictionary.

> Eeep, gad no.  The python is horrible.  The prefix syntax is equally
> horrible, unfamiliar, and ambiguous!  For example, why does call: not
> have an argument

Because I'm not passing an argument to the SQL statement.  In my 
implementation, the syntax is "call:arg1,arg2,...", where each argument 
is required to be a variable name.  Every prefixed path element operates 
upon the current traversal object, using the argument (if any) to the 
prefix.  Here's a list that demonstrates:

x/key:foo  --> x['foo']
x/item:0   --> x[0]
x/attr:foo --> x.foo
x/call:foo --> x(foo)
x/var:foo  --> getattr(x, foo) or x[foo] (path traversal semantics)
x/fmt:%.2f --> '%.2f' % x
x/fmt:thousands_commas --> thousands_commas(x)

> Yes, alternative is very nice.  Yes, it can be done with python:path(),
> or by refactoring the expression to an script.  Yes, the alternatives
> are harder to read, or more work.  Nu?

I can't think of a way to implement my first example using 
python:path(), though you could certainly do it with a Script.  The 
second example can be awkwardly rewritten by defining "exists:data/stat" 
and using it in a short-circuiting boolean expression such as "have_stat 
and thousands_commas(data.stat) or 'No data.'".  My point is that these 
prefixes allow a degree of precision, when necessary, that is not 
possible in current TALES without totally transforming the expression.

> Doesn't it strike you as odd that sometimes the prefix denotes
> parameterization, and sometimes it denotes application?

I hope that the list above makes the consistency clearer.

Cheers,

Evan @ 4-am