[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: highly parametric interfaces



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       cowan@ccil.org
ours, only more of it consists of Toronto.          http://:www.ccil.org/~cowan
        --Ursula K. Le Guin, Changing Planes