HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, N$ m) r9 B, Q% P$ E
# m! p6 Y$ s, q x @ public Object buildActions () {
" v- B" v3 B( f5 `. a2 Z super.buildActions();: x+ i8 k" ]+ A5 L' E4 k
8 Z# {& [% L0 R2 M% d& i // Create the list of simulation actions. We put these in
) x( Q. Y' o( p v // an action group, because we want these actions to be
5 U: d1 [$ ^, C1 L // executed in a specific order, but these steps should% R' i7 k& J1 @! X. ?4 ~
// take no (simulated) time. The M(foo) means "The message3 X% ?/ v4 Y& S* H, _; h
// called <foo>". You can send a message To a particular- w _. B, e. Z$ n* @6 x/ Z; j
// object, or ForEach object in a collection.
/ @$ `! V. r2 h2 J
9 z4 n- F5 \+ O- n3 Z2 L$ N; j( R // Note we update the heatspace in two phases: first run, m, k% b* ^. E! n1 F
// diffusion, then run "updateWorld" to actually enact the9 q# q& ]2 |. B/ B/ d& M
// changes the heatbugs have made. The ordering here is6 A2 r0 s' i9 A! D( i
// significant!# a5 n& G9 I1 b# i
% v( U: a- }8 ]2 i // Note also, that with the additional
3 P6 R" y' h7 t# S7 f, k // `randomizeHeatbugUpdateOrder' Boolean flag we can
( d* [+ d" W% w. U& \8 s0 j // randomize the order in which the bugs actually run
, W& d5 V$ D# V# F$ @, t5 ]4 H // their step rule. This has the effect of removing any h7 H- y& r- o, d
// systematic bias in the iteration throught the heatbug+ O& D/ r( `/ g: H2 D) X, o7 Z- D
// list from timestep to timestep
$ }' ]/ W+ P0 O) u6 e5 s" b
6 U# a; h2 v; {9 C% r' { // By default, all `createActionForEach' modelActions have, V1 Q: z/ D2 D$ g a1 {
// a default order of `Sequential', which means that the+ U: K9 O# f! K# E9 d, `
// order of iteration through the `heatbugList' will be( {3 r$ }5 t% E; A- l2 u
// identical (assuming the list order is not changed
$ W$ J; F- B0 R4 |1 R // indirectly by some other process). [3 f7 R3 f1 g/ V
" [( [% Q) V- F$ G+ C! N+ }3 H
modelActions = new ActionGroupImpl (getZone ());& Z$ O7 K) ?* I0 }) s; Y& F5 t4 ^) s
) t) ^: o4 l. e
try {
$ P+ j4 [: `- E# { S. \- [ modelActions.createActionTo$message/ M3 S g9 `- J/ x) g. O
(heat, new Selector (heat.getClass (), "stepRule", false));
2 v5 M& e& y; y% Z } catch (Exception e) {/ b4 a- l* J9 l& A/ b& K) l
System.err.println ("Exception stepRule: " + e.getMessage ());8 N& i7 p, f/ ^. F3 B& e5 L
}' q; @& J! k5 j8 [$ f
; c- D# g! F& L0 w' u try {+ j( R8 d# V* x/ n, Q& ]
Heatbug proto = (Heatbug) heatbugList.get (0);
% V- X" U. `) b8 \ Selector sel = , K# P5 _, J5 y' D
new Selector (proto.getClass (), "heatbugStep", false);
' \: w4 _) O2 F& J7 o8 a( t9 p2 y actionForEach =) N1 Q, b" J5 z
modelActions.createFActionForEachHomogeneous$call0 M; ~$ y" v- C4 s P. ^2 W K
(heatbugList,$ z \; {; }, D# o$ ], q
new FCallImpl (this, proto, sel,
6 |6 }- R' [" D' A new FArgumentsImpl (this, sel)));( N6 E! [- Q$ h1 a+ j! }
} catch (Exception e) {
- u3 T) H: d- h e.printStackTrace (System.err);
% b+ a: ?' [/ e0 w9 v6 q& B" ^ }
% c/ \' j- e( j1 s! _
* u: g7 \* ] c$ M5 ] syncUpdateOrder ();
+ }( I' Z; I6 p4 W8 Y5 o5 N8 n6 \
( v0 `9 I# y9 Y$ [7 t2 W" i try {6 M/ v0 u( @( }- L
modelActions.createActionTo$message - B3 H- V+ u4 f' H/ h
(heat, new Selector (heat.getClass (), "updateLattice", false));
* U' t3 ] l) e) R% I) _ q } catch (Exception e) {, [( Y9 y; d! G$ c0 [$ L& Y
System.err.println("Exception updateLattice: " + e.getMessage ());
& S8 g& K7 H& q% ? \) T8 d }
" `( ]; `3 a0 p1 I
3 v' f2 ~8 N2 ? // Then we create a schedule that executes the! P$ e+ |) M) S w0 B
// modelActions. modelActions is an ActionGroup, by itself it- s1 Z& t5 f7 `; B
// has no notion of time. In order to have it executed in3 e# J$ l8 ?9 Z1 \' W
// time, we create a Schedule that says to use the( Y3 h& q0 g* X$ c- B, T2 ^7 r2 U0 @
// modelActions ActionGroup at particular times. This
& f) a, E( [ l* W // schedule has a repeat interval of 1, it will loop every
2 A: r2 y1 D) u# v: ]$ c2 \$ {- [" v/ v // time step. The action is executed at time 0 relative to
2 [ E. x# T/ g- n1 v% h // the beginning of the loop." E5 E+ P: D" b" f9 r( [4 k* ~: Q. q
" m7 R' u/ X. O) w% O/ e* d
// This is a simple schedule, with only one action that is8 }7 y- u# @9 y0 M( {
// just repeated every time. See jmousetrap for more$ {- k$ q( R4 [
// complicated schedules.
0 L% w( ]! F6 Q) n: k+ O 4 c, d* W1 S9 k
modelSchedule = new ScheduleImpl (getZone (), 1);* K4 |2 K7 ]& e2 \' o2 e' g
modelSchedule.at$createAction (0, modelActions);
( h6 v; \9 y0 [" W2 \
* i8 w/ z; A, E return this;$ `. M: v6 I8 p: }( {; U8 O& W
} |