HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 t9 j& z0 _6 }/ ]* j6 ?$ F0 M5 H4 B6 O1 X9 M# ^
public Object buildActions () {
$ j! s& r# |. E+ G/ r super.buildActions();; | u% T% g k' y2 a% l# z, r( V
9 g, o; N8 P R/ t# A
// Create the list of simulation actions. We put these in) e8 T5 k6 V `- e( k
// an action group, because we want these actions to be1 h$ s0 S' Q: [
// executed in a specific order, but these steps should
# Y6 x# F2 U* x9 E- r( b; T [ // take no (simulated) time. The M(foo) means "The message
9 |# K! p4 Y* @3 r8 p* [ // called <foo>". You can send a message To a particular( p6 p, z- U) U% {- H- J
// object, or ForEach object in a collection.
/ R( U+ @, k) Z5 G# o0 | 1 B0 |; M2 O& K3 m- e# Z9 f8 Q7 Z
// Note we update the heatspace in two phases: first run* S% E( c0 P7 f: I$ z; y1 _9 K
// diffusion, then run "updateWorld" to actually enact the8 `# f" Y+ U, p5 p- H8 k
// changes the heatbugs have made. The ordering here is+ o. d8 G2 J4 ?4 [( k: e
// significant!9 A" X1 L( h: E" o. |1 c0 E
5 G* E, z& ~8 E; z
// Note also, that with the additional' K' [" w7 |* o, J+ c; }
// `randomizeHeatbugUpdateOrder' Boolean flag we can' d7 t. o) q }! Q
// randomize the order in which the bugs actually run
) i- c% J* B7 R5 j* z& \ // their step rule. This has the effect of removing any: r) x! Y( J0 g0 @1 d2 B
// systematic bias in the iteration throught the heatbug! f: f( T o& Y8 f
// list from timestep to timestep
! P& q. x; d, w, j 5 m$ V; P$ Y& N( j
// By default, all `createActionForEach' modelActions have8 w b& \$ l- O0 B
// a default order of `Sequential', which means that the3 \; X- p$ q. |- b% X h
// order of iteration through the `heatbugList' will be# [- a- g$ k& i) `/ d! h
// identical (assuming the list order is not changed
; p+ y$ S/ _$ S& | // indirectly by some other process).
0 F& H) \# g: X6 h! b/ t! c* m
. A; ^+ Q/ a: z( f modelActions = new ActionGroupImpl (getZone ());* T+ c+ B: A) Z
, V; A$ Q; J: R1 D) d' y try {* e5 X" X+ ^3 p- Z
modelActions.createActionTo$message) E; f' n/ g5 r# l; S1 S
(heat, new Selector (heat.getClass (), "stepRule", false));. X- [1 f6 ^4 b
} catch (Exception e) {
9 ^2 D" c. T5 L9 d/ K System.err.println ("Exception stepRule: " + e.getMessage ());
5 x0 p4 E0 l* k }5 _, V+ s( x. f- b+ x7 H/ \8 Y" `
* z* Z% [( x2 n5 e4 D. `! Y$ P
try {
Z& I( T6 D& t" W8 Q, O; A Heatbug proto = (Heatbug) heatbugList.get (0);$ B5 @+ @$ F$ L. a2 }
Selector sel = ' V7 N- B8 G* Z+ l" z3 o- m1 h$ p
new Selector (proto.getClass (), "heatbugStep", false);9 d3 J g- h1 l9 D
actionForEach =; @8 y: \$ }( ^
modelActions.createFActionForEachHomogeneous$call
5 M: q1 q d6 x$ _6 I: _8 U (heatbugList,* s# a* d. g! `& W9 ^9 b/ |1 K
new FCallImpl (this, proto, sel,8 s( \2 N4 h# O s" B/ r4 X
new FArgumentsImpl (this, sel)));( K7 |/ g u7 c5 @
} catch (Exception e) {2 W* W. {: h# T3 }, n- S+ l
e.printStackTrace (System.err);
6 F$ M9 w2 @: k4 A }/ a B1 g: B, z$ ^" e
) L& `+ J' ~6 ]8 D0 h, W( W
syncUpdateOrder ();
9 f" m; h2 O" c8 s9 G# e" v5 e2 z3 Q7 F
try {
; E k0 m0 b( e6 ~) G w/ Q+ m modelActions.createActionTo$message ( t' b4 s& G/ B: t0 A/ q U
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 K% s2 G4 b6 M1 Q# l! d9 }( a } catch (Exception e) {
" [7 F1 S1 k1 j$ W C System.err.println("Exception updateLattice: " + e.getMessage ());
+ s. g" N; w2 C; v- \ }
1 `6 V9 L* n% M5 h7 d. F: V/ T
1 T4 E% N. R/ H% p( o // Then we create a schedule that executes the4 n9 s0 p) F9 u% t& S: A
// modelActions. modelActions is an ActionGroup, by itself it
6 E" F( s4 L" [* [ B& V& u. T: y // has no notion of time. In order to have it executed in
& i6 F0 L7 X- m: q! r. v // time, we create a Schedule that says to use the
( W0 u% c8 T& p" ?. f // modelActions ActionGroup at particular times. This
" C$ n3 Z5 d4 g* a/ `6 e // schedule has a repeat interval of 1, it will loop every
2 d" z/ X; O( `; n3 A // time step. The action is executed at time 0 relative to
u% [ K3 ]. y' Y* i. F // the beginning of the loop.
* s) ?, ]: w, F
1 d5 k" f1 p" T- } // This is a simple schedule, with only one action that is
3 ~/ _7 e m; Z* W3 o // just repeated every time. See jmousetrap for more
& d; |* o! V0 c- K1 z2 y6 X) v // complicated schedules.
& @) ~9 S% A- y; m9 k9 ] 3 `1 B2 q+ R- [2 V
modelSchedule = new ScheduleImpl (getZone (), 1);+ i0 m( b3 C5 ` G
modelSchedule.at$createAction (0, modelActions);6 i% A w) s, {6 c- \) h
. M5 T: u% Q6 p( ]( g# L: S return this;
5 G7 C7 o. u9 J( ~/ c; t, ] } |