From: Zoran V. <zv...@ar...> - 2005-05-30 19:02:01
|
Am 30.05.2005 um 12:23 schrieb Stephen Deasey: > > The other option is -eightbit:flag syntax. It's not perfect, but it's > better than nested lists and has ~5 years of usage in the ACS behind > it. > Another try (I can't just let go) ... I do not see much sense in trying to keep the Tcl argument list format under all costs. Give me a good reason why we should do that? Anyways, we are about to define a new "proc"-type of command (ns_proc) aren't we? What is the sense then to force ourselves to the old format? Why don't we *extend* Tcl-proc arg-treatment like this: {name typecheck ?default_value?} This is *not* Tcl-proc compatible but *is* in the spirit of the language. The "typecheck" above can/will be definitely a list of one or more elements, depending on the check itself. The typecheck is *forced*. You must give a type. If you need no checking at all use "string" which will cover all possiblities. By *forcing* the type-check, many of the programming errors and double-checks in the procedure itself can be saved. Also, all people needing no extra checking can always use plain Tcl-proc calls. Others who'd need checking would use exteneded ns_proc syntax. This is pretty clear and I see no problems with that at all. For example: ns_parseargs {{-retries int 0} {-blockcopy flag} {device string} args} or ns_proc dosomething {{-retries int 0} {-blockcopy flag} {device string}} { # ... } The most natural Tcl-way is to use lists. We've seen that the desperate try to keep the Tcl-proc syntax leads to too complicated nested lists which humans are not easily assembling. So, this is a plain list which is easy to write and read by humans. We can evolve typecheck over time to include more elaborate tests, but a handful of those (string, int, flag, bool, list) are most useful and complete for about all the needs I can think of at the moment. What is wrong with that (except that it perhaps does not follow openacs model)? Zoran |