HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ K5 E6 f7 \9 i2 h4 L( g
. l. f, u0 }* r; G3 Q* y public Object buildActions () {
4 T( \- v3 O# J; T super.buildActions();# E9 |2 }2 T) }2 G! b! t2 T! ^
1 w# y8 x% u! h* d // Create the list of simulation actions. We put these in
0 J7 r/ Z8 G0 i, G: s0 h6 T // an action group, because we want these actions to be
0 k' E) f: p, v' b // executed in a specific order, but these steps should& V2 P+ V+ L8 X! ]3 _3 r. e
// take no (simulated) time. The M(foo) means "The message
& `6 R* R8 n5 ~9 R // called <foo>". You can send a message To a particular$ O% f. C) F, z8 q
// object, or ForEach object in a collection.
9 H1 l0 {4 U" U) i1 p; V& g* @6 ?
- t" n T! N5 \' |, I- p // Note we update the heatspace in two phases: first run7 C+ @ p) y- u! F5 u0 Z
// diffusion, then run "updateWorld" to actually enact the, E2 R- ^4 W5 L
// changes the heatbugs have made. The ordering here is; L* {! `' W! t
// significant!. `: m! L5 G( e4 @4 w
( u! d$ ^5 d+ ]' k/ l
// Note also, that with the additional
5 D/ o: J+ K" |: O9 X6 K+ K& ] r // `randomizeHeatbugUpdateOrder' Boolean flag we can
j0 `3 N% f. a$ F6 T // randomize the order in which the bugs actually run
/ j- |$ P9 ~) i2 _4 J i" K // their step rule. This has the effect of removing any) f: b3 p: V$ K3 J* ]# P
// systematic bias in the iteration throught the heatbug
9 X3 j1 o% b0 k8 m, V! V // list from timestep to timestep% d/ e! q% b4 U8 K
" @) e Q# F1 ]( Z' ] // By default, all `createActionForEach' modelActions have7 J. h; x, h _/ \$ T; N
// a default order of `Sequential', which means that the
, U% e2 \) A2 A // order of iteration through the `heatbugList' will be! F1 J% R. m) h+ N) Z7 n& b) H
// identical (assuming the list order is not changed
: G! Z+ ^( W: o // indirectly by some other process).6 b( d8 i6 z* m7 Z, \
. [% [2 A0 v+ i5 B h modelActions = new ActionGroupImpl (getZone ());5 E' n# }; c* V
8 S% h1 |: i3 H4 w4 o3 e$ U try {3 Y8 q3 _; C3 _" c* Q( M
modelActions.createActionTo$message L) k$ q, Y; b2 [' q
(heat, new Selector (heat.getClass (), "stepRule", false));
! l! O: A2 b+ c! N* i% o } catch (Exception e) {
- Y9 B3 {- g5 s. p* z( u6 e System.err.println ("Exception stepRule: " + e.getMessage ());9 W1 h$ t8 ^9 j* p) B# T
}0 N$ l9 h8 E8 z+ R. O% v: G3 B. \
" E4 w- _- c6 Y1 u3 g6 ]
try {/ D7 ~1 @% D8 e V1 y! T
Heatbug proto = (Heatbug) heatbugList.get (0);
( F6 S" P1 o0 S/ E1 g. ~0 r Selector sel =
6 V( B+ A( E3 J1 w new Selector (proto.getClass (), "heatbugStep", false);" F9 o: z2 s- I! i- d+ {# j
actionForEach =0 i8 l. g( B" k1 h% I
modelActions.createFActionForEachHomogeneous$call
7 |9 k& W; c- f: l; z3 }% s+ t (heatbugList,
' c+ f+ Q4 h4 {, b5 B: l3 e new FCallImpl (this, proto, sel,% |6 L4 \/ Y1 V, C: C& q
new FArgumentsImpl (this, sel)));
$ m' Q, \- d+ i m* B } catch (Exception e) {# C" L$ F" r* y" p
e.printStackTrace (System.err);6 `8 H; m: L5 |. ]+ ~5 C: `. U/ m
}5 z% d5 ~/ A5 {$ b `
+ z. R5 p) u6 V syncUpdateOrder ();
! D( ^7 U3 r& `$ k8 W" o2 t- }1 P0 [! T6 a9 z: S
try {" x$ I% Z3 e( c% j7 }( W, b9 @
modelActions.createActionTo$message
m' z6 Q- e9 o3 [; V3 P8 X (heat, new Selector (heat.getClass (), "updateLattice", false));
: z. |$ q z/ m6 X, j, X } catch (Exception e) {
, _5 E$ J8 K# s$ z2 e/ p, u System.err.println("Exception updateLattice: " + e.getMessage ());
9 z8 T3 \/ u: Z: T1 z" | }
$ I5 b- j+ W. Z8 Q9 }5 u
3 J5 o$ |2 s2 q2 U J // Then we create a schedule that executes the
7 b0 s7 e! m2 O // modelActions. modelActions is an ActionGroup, by itself it
9 q* \3 Q) n3 e) F7 T/ [ // has no notion of time. In order to have it executed in
0 d# O: X' p0 ]7 c9 d/ M% \% p // time, we create a Schedule that says to use the
4 t0 x" u+ ~$ [3 T8 U5 Q // modelActions ActionGroup at particular times. This" D- x, i6 D7 b
// schedule has a repeat interval of 1, it will loop every
4 d3 A, R% s: A // time step. The action is executed at time 0 relative to
+ Z, X" ^" F/ Z4 }4 z6 y // the beginning of the loop.
- M8 |1 \. Z+ z) y: O% T7 P/ B8 {, Q* t/ Y( T3 Y4 `, j9 q
// This is a simple schedule, with only one action that is, `4 X" | s+ L: J3 H: \
// just repeated every time. See jmousetrap for more9 Q$ [ |' B2 E5 E, {* i1 p5 y. @, W
// complicated schedules.
- @' J1 I, l; e# {4 ^
! ^# t- Q6 p: L modelSchedule = new ScheduleImpl (getZone (), 1);
% s; h( e! Q3 t1 \9 ? modelSchedule.at$createAction (0, modelActions);
E9 U. G7 e8 D5 @/ {( K $ k" W+ T4 ?/ ^6 ?% Q
return this;
: O- E2 u& p' G3 x( L9 b, ] } |