HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) P: |% ~8 k$ i, V1 ]9 e
: P) ^" X! V4 t; Y public Object buildActions () {
" o! N/ B8 z' Y, L5 T- Z3 t5 | super.buildActions();; A0 V$ N( W6 V( z* g8 b7 T2 a
3 c1 t7 h+ u3 C6 M6 l; Q. }4 p0 t // Create the list of simulation actions. We put these in; D+ r/ Y3 p. l" k$ R9 f
// an action group, because we want these actions to be
, i+ ~( V z9 S // executed in a specific order, but these steps should
1 m* Q# y9 F3 ]$ O" D- a // take no (simulated) time. The M(foo) means "The message
. w# F% g& C% n7 S' H6 U1 h7 b // called <foo>". You can send a message To a particular$ ?, Q/ Q- ~, m
// object, or ForEach object in a collection.' x* i; m3 h6 g$ T0 ?
: i/ @% f! {+ K! w- w // Note we update the heatspace in two phases: first run/ x; B. B# ~* X$ |& S! @
// diffusion, then run "updateWorld" to actually enact the
2 C9 q3 I( i; t& T+ p // changes the heatbugs have made. The ordering here is4 G, q" r* x C" u6 [0 ]
// significant!2 [/ g+ _/ j, f% Z0 m" ]8 o6 }
5 d2 F K$ v# d, G* G
// Note also, that with the additional
5 |4 Q* J9 S3 _; r // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 m# m# x' G! |. ]$ _ // randomize the order in which the bugs actually run, d' j# H; S5 g' ~& Z3 V8 g
// their step rule. This has the effect of removing any
5 d; |) |. Z5 }# U \ I: K. A& t! P; z // systematic bias in the iteration throught the heatbug3 l l; U4 \4 ^
// list from timestep to timestep
* c. F/ f, o) [3 A5 l2 Y8 V
; X% ]7 n8 ?$ \% J // By default, all `createActionForEach' modelActions have: {# q- Z* l. W9 v$ |+ H6 U. W
// a default order of `Sequential', which means that the
0 l3 W% c3 z4 o/ i* r // order of iteration through the `heatbugList' will be, k7 Y/ b3 L4 A8 r+ m) n6 D
// identical (assuming the list order is not changed1 O5 v' d0 E8 K& V5 ^( c8 g! `
// indirectly by some other process).: w# ~; f1 \. f3 g
( ~( _" H0 v* d, O7 y# J modelActions = new ActionGroupImpl (getZone ());
- ~( Y/ }0 n! Y7 \7 B0 S3 @! R' E) g! W5 ~6 P+ Y
try {- s$ F, ~+ v f# x
modelActions.createActionTo$message
( K1 S6 K, u w8 D8 O* \, @) o (heat, new Selector (heat.getClass (), "stepRule", false));
2 N9 L" u, c+ V7 c& {# L } catch (Exception e) {2 c5 b! p$ g: W: ^
System.err.println ("Exception stepRule: " + e.getMessage ());& N2 {, M, ^& w0 U* W3 u
}
% I% G- v& p; k2 l& T3 p/ m7 e6 g$ U4 k5 E4 e3 F" b1 f
try {! l: j5 G4 }& b2 T9 j1 ^5 A
Heatbug proto = (Heatbug) heatbugList.get (0);
5 u, L( X/ i1 @0 \# ]1 a" u. p Selector sel =
! A8 V( B7 @9 [% T* Q) x5 g new Selector (proto.getClass (), "heatbugStep", false);
, R+ ]9 w1 @# b* p actionForEach =) h! M5 h/ }* |$ T0 w
modelActions.createFActionForEachHomogeneous$call' Q- I* Z3 Y8 T% Q, n
(heatbugList,
$ L( M: g# P/ u new FCallImpl (this, proto, sel,
: ^$ Q5 `1 d1 j$ Q8 Z# c8 F new FArgumentsImpl (this, sel))); [! b, g; i; [, }- A- V
} catch (Exception e) {
/ e; h! e! J8 G |$ V& Y" n& P4 c7 i e.printStackTrace (System.err);8 u& z! t: J, U4 i! V
}
) V3 K# {& ?& g d7 u % p V; G% G- U; S" o4 [% f1 `6 z
syncUpdateOrder ();8 q4 J4 Z5 r" g0 m
8 J) s* m6 _6 C4 R# E try {; ]- s8 x4 I, }' |& E5 P
modelActions.createActionTo$message
( L8 {% n! w: V3 S3 Z (heat, new Selector (heat.getClass (), "updateLattice", false));
5 C' Y4 b0 ]; [ } catch (Exception e) {) x9 V' O/ q7 S9 Z6 x
System.err.println("Exception updateLattice: " + e.getMessage ());9 x+ ]7 |' k' D, f1 W7 {& X
}
6 O$ B! {$ J8 K
: ^' k4 n; b) M7 L // Then we create a schedule that executes the% V' ^, m' A, P& _
// modelActions. modelActions is an ActionGroup, by itself it+ E8 E R1 l9 `- r& s# L
// has no notion of time. In order to have it executed in
( H& t6 c& G4 g$ T, h+ q // time, we create a Schedule that says to use the
; ?/ D( E$ J. w% m3 U // modelActions ActionGroup at particular times. This& r% k/ B( p" t/ r8 K( u
// schedule has a repeat interval of 1, it will loop every
) r3 t x7 `, B7 @) T2 J8 M // time step. The action is executed at time 0 relative to
/ E( Y' n# {7 [' P; q // the beginning of the loop.
$ x) B9 y8 T$ c5 p1 A; }8 ~1 q) w4 _- {& `; `, X$ J
// This is a simple schedule, with only one action that is
% \- M9 U# {' S' Z // just repeated every time. See jmousetrap for more7 v, G- b" I0 v+ @/ H
// complicated schedules.* w- M2 I$ ^4 d/ {( u
+ d+ ?$ m/ A/ R2 I
modelSchedule = new ScheduleImpl (getZone (), 1);" y, Z% G6 p; s: f
modelSchedule.at$createAction (0, modelActions);
0 A) _! r5 r- W7 k L% t& t; L ; U5 t* i' p9 j/ Y; D: A3 z- R* o Y
return this;' B& V/ `. a) t4 H
} |