Re: highly parametric interfaces
John Cowan 14 Apr 2006 04:52 UTC
Alex Shinn scripsit:
> Perl effectively uses the latter, passing
> hash-tables as arguments to complex functions, but Perl's
> hash-table syntax makes this feel more like a keyword interface,
> discussed below.
Lua, which only has hashtables (the constructor is { ... }) allows
calls of the form foo{bar=baz, zam=quux}, which passes a single
hashtable argument, although parentheses are normally required
around all arguments.
> * Efficiency-oriented OOP - "Just set the parameters in the calling
> object." This person of course assumes there are no functions,
> only methods, and only for a single calling object. This is where
> you get:
>
> (define fmt (make-number-formatter))
> (number-formatter-set-complex-behavior! fmt O_POLAR)
> (number-formatter-set-magnitude-style! fmt O_FLOAT)
> (number-formatter-set-magnitude-places! fmt 2)
> (number-formatter-set-magnitude-radix! fmt 8)
> (number-formatter-set-angle-style! fmt O_FLOAT)
> (number-formatter-set-angle-radix! fmt 10)
> (number-formatter-format fmt n)
As I pointed out earlier, you actually don't: you get
some variant of (fmt 'complex-behavior-set! O_POLAR) or
(fmt 'set! 'complex-behavior O_POLAR).
> [Alists are] fully general, and can express nested formats like the
> polar example naturally. Unfortunately, for more typical examples
> this is usually going to involve backquotes and commas
>
> (button `((text . ,(gettext "OK")) (action . ,quit)))
Which is why my proposal #2 uses keyword syntax as an alternative
representation of an alist or plist backquoted.
--
While staying with the Asonu, I met a man from John Cowan
the Candensian plane, which is very much like xxxxxx@ccil.org
ours, only more of it consists of Toronto. http://:www.ccil.org/~cowan
--Ursula K. Le Guin, Changing Planes