On Jan 31, 2006, at 6:16 AM, Frank Barknecht wrote:
Hallo, Hans-Christoph Steiner hat gesagt: // Hans-Christoph Steiner wrote:
I have written some classes for handling arguments when writing classes in Pd. They are [float_argument], [symbol_argument], and [any_argument]. Currently, I am thinking in general, inlets should be matched to arguments and vice versa,
"should match" would be oversimplyfiying, but having an extra inlet in the argument-patches never hurts.
so these objects all have a "convenience" right inlet, to attach the [inlet] to so that the data all comes from the [*_argument] object.
To use them, you add the argument you want it to handle like this:
[float_argument $1]
If you want a default value for when none is specified, you would do it like this:
[float_argument $2 234] [symbol_argument $3 default] [any_argument $9 asdf] [any_argument $5 444]
I attached "list_argument" which does the same as "any_argument" but doesn't require any externals and is much simpler than [any_arg...]. In fact, it's just [float_argument] where "float" is replaced by "list append".
Note that I would much prefer, if [list_argument] would be renamed to be [any_argument] and replace it.
Reason is: The name "list_argument" could lead to wrong expectations: It doesn't handle variable length lists as arguments, because that is impossible without externals like dollarg. It just handles one-element lists which get auto-converted to their respective type: "symbol x" or "float x".
Of course it won't work with Pd < 0.39.
Regarding symbol_- and float_argument: These could be implemented as:
[list_argument $1 $2] or [any_argument] | [route symbol] or [route float] | [outlet]
to share more code. Because Pd autoconverts one-element lists, there will always be a proper selector to make [route] do The Right Thing.
I found one key difference between [any_argument] and [list_argument].
[any_argument] outputs a non-symbol, [list_argument] outputs a symbol.
So that means that if you want to handle messages like [word( with
[list_argument], there will have to be this after it:
[route symbol] | [route word]
Personally, I think its better having the argument not be a symbol since its very likely that [route] will be involved soon after. Also, for [list_argument], you'll need some extra logic on the convenience inlet to make sure that the output on the [outlet] is always consistent. I attached a version of [list_argument] with this extra logic:
[inlet] | [route float] \ [symbol] \ / \ / \ / [outlet]
This gets into another definition question. What is the type in this
message: [word( Its not a "not-list list" since its not a list of any
kind. Pd itself doesn't call one element messages a "list". And a
"non-list element" would also include this: [5(. So I guess its an
"undefined element" to match "undefined lists".
So we have: bang float symbol list pointer undefined element undefined list
I guess we should just coin words for these, like undelement and
undlist ;) Let's check the thesaurus for list: inventory; or element:
item, unit. Or how about this: "untyped list" and "untyped element".
.hc
"The arc of history bends towards justice."
- Dr. Martin Luther King, Jr.