[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sc-users] out of scope variables when passing functions was: Re: [sc-users] SystemClock-schedAbs explodes when time arg not used?
Ok, i found this... solution? hack? workaround? who
cares?
instead of:
5.do{arg i;
SystemClock.schedAbs( thisThread.clock.seconds + i +
1.0 , {arg time; myA.dump( k ); nil } );
("but while i is "++i++" k is "++k).postln;
k = k + i;
}
do this:
5.do{arg i;
var val;
val = k;
SystemClock.schedAbs( thisThread.clock.seconds + i +
1.0 , {arg time; myA.dump( val ); nil } );
("but while i is "++i++" k is "++k).postln;
k = k + i;
}
so the variable k gets asigned to a shorter-lived
scope and which keeps the desired value
--- Charlls Quarra <charlls_quarra@xxxxxxxxxxxx>
escribió:
> was: Re: [sc-users] SystemClock-schedAbs explodes
> when time arg not used?
>
>
> --- James Harkins <jamshark70@xxxxxxxxx> escribió:
>
> > A function is aware of variables in all enclosing
> > scopes, unless the
> > function defines a variable or argument having
> the
> > same name as a
> > variable in a higher-level scope.
> >
> > arg item ,i, at=i;
>
> This is a one or two weeks old thread, but
> tinkering
> with the SystemClock explode thread examples i could
> manage to come up with an example that truly
> reproduces the problem i was having (and is the true
> reason of the other thread)
>
> look this:
>
> MyClassA {
>
> *new {
> ^super.new.init
> }
>
> init {
> }
>
> dump { | me |
>
> (" great "++me).postln;
> }
>
> }
>
> MyClassB {
>
> var <>myA;
>
> *new {
> ^super.new.init
> }
>
> init {
> myA = MyClassA.new;
> }
>
> play {
> var k;
> k = 0;
> 5.do{arg i;
>
> SystemClock.schedAbs( thisThread.clock.seconds + i +
> 1.0 , {arg time; myA.dump( k ); nil } );
> ("but while i is "++i++" k is "++k).postln;
> k = k + i;
> }
> }
>
> }
>
> then;
>
> a = MyClassB.new;
> a.play;
>
> but while i is 0 k is 0
> but while i is 1 k is 0
> but while i is 2 k is 1
> but while i is 3 k is 3
> but while i is 4 k is 6
> a MyClassB
> great 10
> great 10
> great 10
> great 10
> great 10
>
> So i'm getting the value of k at the time of the
> execution of the scheduled function. What i want is
> to
> pass the value of k at the time of the _scheduling_,
> that is what i want *views to the heavens with a
> thanks gesture*
>
>
> __________________________________________________
> Correo Yahoo!
> Espacio para todos tus mensajes, antivirus y
> antispam ¡gratis!
> ¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
> _______________________________________________
> sc-users mailing list
> sc-users@xxxxxxxxxxxxxxx
> http://www.create.ucsb.edu/mailman/listinfo/sc-users
>
___________________________________________________________
1GB gratis, Antivirus y Antispam
Correo Yahoo!, el mejor correo web del mundo
http://correo.yahoo.com.ar