On Sep 28, 2006, at 4:16 AM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
So the other kind of consistency in question here is consistency of usage. All similar functions should have the same arguments, for example. Which type of consistency trumps the other? That's the question at hand.
I personally feel that its not more linguistically consistent to have [once] default open when it has no argument. But this is inconsistent in usage with similar objects ([spigot]...).
I would speculate, that users would expect [once] to be open as default. While I generally don't use [once] in its own right, several of my patches have [pd once] subpatches, and these all default to open. There also is a very similar abstraction in the RTC-lib called "first-bang", which is like a [once] that is open as default but additionally passes bangs coming in after the first one to a second outlet. Nowhere in RTC-lib [first-bang] is used with a loadbang to its second, "reset"-inlet.
I guess, basically we disagree about what should be valued higher: consistency or usefulness. I consider a default-closed [once] rather useless. Not completely useless, but "not used 99% of the time" and the 1% can be dealt with through a loadbang, which is contrary to a default-close or default-open [spigot]: Here both versions are used about equally often.
This actually is similar to the inconsistency of [timer]: Most of the time, [timer] follows a [trigger bang bang] object (or rather a [t b b] object which even has the same visual length as [timer]) and the connections are made in a non-crossed fashion. That's the (only?) reason, [timer] has its active inlet on the right. In this case, Miller also chose usefulness over consistency, and I'm glad he did.
Obviously usefulness is essential. [once 1] would provide the default open behavior. I guess it really goes back to whether it always makes sense to init things to zero. Almost always it does, but not here. I suppose the best of both worlds would be to be able to differentiate between 0 and no arg. Then the first argument could be used for open/closed state, and no arg could default to open. $# and $@ would do this if properly implemented.
.hc