[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sc-dev] [commit] Still More OSCresponder issues
/*
Actually the new version does this too:
// responder without addr (addr is nil)
all[cmdName.asSymbol].do { |item| item.value(time,
msg, addr) };
// responder at command name
all[signature].do { |item| item.value(time, msg, addr) };
Should be changed.
S.
On 21 Nov 2004, at 12:06, Scott Wilson wrote:
Okay, this one is really bad and has been the source of some quite
annoying bugs:
OSCMultiResponder : OSCresponder {
var <>nodes;
value { arg time, msg;
nodes.do({ arg node; node.action.value(time, node, msg) });
}
isEmpty { ^nodes.size == 0 }
}
-value here iterates over a collection which may be altered by its
members before iteration is done (i.e. by removing themselves!).
Considering how often I harp at my students for this sort of thing
I'm embarrassed how long it took me to figure it out. I've changed it
to the code below and committed it, as I think even if the system
gets replaced, this is a current source of many bugs.
value { arg time, msg;
var iterlist;
iterlist = nodes.copy;
iterlist.do({ arg node; node.action.value(time, node, msg) });
}
Whew...
*/
of course you are right in general.
but try this:
(
a = [1, 2, 3, 4];
f = { a.do { arg item; item.value.postln } };
Routine {
inf.do { arg i;
if(i % 2 == 0) { a.removeAt(0) } { a = a.add(8.rand);
a.scramble };
0.01.rand.wait;
}
}.play;
Routine {
inf.do { arg i;
f.value;
0.5.rand.wait;
}
}.play;
)
I think there are no errors due to this. There is a bad OSCresponder
problem, but I believe it is not due to this.
Not copying the array saves calculation in this time critical place.
--
.