On 5/27/05, Zoran Vasiljevic <[EMAIL PROTECTED]> wrote:
>
> Am 27.05.2005 um 11:34 schrieb Stephen Deasey:
>
> > Where we left the discussion last time is how to deal with type
> > checking. Boolean switches and range values are basically just forms
> > of type checking.
>
> Hmm.... what I understood here was data-type checking as in
> integer/string type of thing.
>
> Under boolean support, I actually ment *absence* or *existence*
> of the option. I do not know how I could achieve this now, unless
> I say:
>
> ns_parseargs {{-boolean 0} args}
>
> but this is also half-baked.
Right, but the option list is type checking. One of the syntaxes we
talked about was:
ns_parseargs {-a:int -b:bool -s:switch} $args
So the boolean switch could use the type syntax. I'm not desperate
for [string is ...] checks so leaving that out will certainly make
life easier, but we still have to think about the syntax for
specifying types as seems we need it anyway...
> OK, lets think about type-checking. I would definitely say that
> boolean type-checking (as described above) should be in.
> The same for option-lists. Those two are most commonly found
> and needed. Other type of checking would not be needed.
> So, if I say:
>
> ns_parseargs {-a args}
>
> then anything what is given to "-a" should be accepted as is.
> Something like "string is ..." checking should be left to the
> programmer.
>
> I believe that underlying C-api already does the above, or?
You mean checking for integers etc.? The C API does do this (has to,
it's C!), but the Tcl wrapper doesn't use it. It was easier to define
a new Ns_ObjvSpec proc to handle all Tcl args than to massage the arg
spec into what the C API expects. I don't know whether it makes sense
to try and use the underlying C stuff or not.
> >
> > Depending on how type checking is implemented, then the syntax of an
> > arg specification may change. You may or may not end up pulling your
> > hair out later if you change all your code to use ns_proc now... :-)
> >
>
>
> Right. Lets fix this now. We can talk about the syntax when/if we
> agree on the scope of the implemented type-checking (as above).
> Deal?
Sure. How would you specify an option list? And would there be the
two types that the C API supports, the choose 1 and the choose 1 or
more? For the choose 1 or more the result should probably be an array
(where the C implementation logically OR's bits).
So, with an option of -thingy where you can choose 1 or more of foo,
bar or baz, specifying -thingy {foo bar} would result in foo(bar) and
foo(baz) being set.
Maybe it would look something like this:
ns_parseargs {{-thingy:either {foo bar baz}}} $args
ns_parseargs {{-thingy:either {foo bar baz} foo} $args ;# foo is default
ns_parseargs {{-thingy:any {foo bar baz}}} $args
ns_parseargs {{-thingy:any {foo bar baz} {foo bar}} $args
i.e. either and any would have to be at least a two element list, the
optional third element being the default value.