If one organizes their abstractions in such a manner that [f $1] always refers to that abstractions "index", one can:

  1. more powerfully clone that object as

[clone object 12]

  1. add both dynamic sends and receives based on that index:

loadbang
|
f $1
|
[symbol objectname-$1(
|
[s]

and

[r objectname-$1]
|

So each object can then
not only get its [all( and [by-idx( messages but also its [r & s] messages outside of the clone thread, ie external from the clone messages, ex. from a gui, hid, OSC, etc., as [s objectname-$1].

Esp. because, I don't know if you've noticed, but working inside clones can be tricky and is prone to losing changes if you don't save the clone's changes before closing.

  1. further, one can then create "2nd level" objects at

[clone parentobject 12 childobject]

Such that inside parent is

[f $1] and [symbol $2].

and all $2's are instances of "childobject".

The benefits of this are:

  1. greater cloning flexibility because one can swap out out which clone is used merely by changing the name.

Ex.

  1. go into the clone
  2. open the child
  3. edit the child
  4. save it as "child2"
  5. exit the clone
  6. change [clone parent 12 child] to
    [clone parent 12 child2]
    and all of the clone thread will be updated accordingly.

Afterward:

I have yet to find a way to send messages into the clone without editing it, though that feature would be enormously beneficial, esp. as it applies to changing the clone's objects and parameters.

p.s. I hope this benefits your creative process in some way. Happy PD-ing!

The more ideas there are to play with, the more fun there is to be had.