HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! W. b+ h5 f- Q- x" O! u
& Z* j+ F& Z" K public Object buildActions () {, k g7 G! U9 Z1 C$ a: v
super.buildActions();9 F( j7 ?! n* V
& p4 _+ |$ q4 x# ? // Create the list of simulation actions. We put these in- V' Q0 W8 \& d( O
// an action group, because we want these actions to be1 _* B; g4 r# |$ }# z" o
// executed in a specific order, but these steps should
0 M2 s+ J% F+ z2 @ // take no (simulated) time. The M(foo) means "The message4 g: p7 d3 v+ e* V4 O* D: w
// called <foo>". You can send a message To a particular
* N, f$ H$ J5 {4 S. ] // object, or ForEach object in a collection.
. u" L& u. q3 a/ L! S# m
3 }/ F1 U# J% E: B) g7 z1 M+ l/ P0 A // Note we update the heatspace in two phases: first run% t1 j" j$ V: P/ g0 g
// diffusion, then run "updateWorld" to actually enact the t( s5 d& W5 g( _
// changes the heatbugs have made. The ordering here is
+ K$ t. u/ b* z8 b1 q4 j // significant!6 y8 Q/ z4 l' N5 R4 x! i: w( c
; B+ J3 @# n6 W( H3 @
// Note also, that with the additional9 R. Q- j5 [( W! j# ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can* |- P$ f9 s' p
// randomize the order in which the bugs actually run& g+ m" G/ W5 z& ^& E3 |* M
// their step rule. This has the effect of removing any U8 m7 h9 ] P6 `9 S
// systematic bias in the iteration throught the heatbug
1 |4 s- p/ p6 R1 O // list from timestep to timestep6 ~8 w/ w" x0 o, }& A' w% [' `
* f4 k9 G) S/ ^* |- K1 W, s! U0 ?
// By default, all `createActionForEach' modelActions have3 i4 L6 o J( K3 v) U: d4 n
// a default order of `Sequential', which means that the
' Y, j. E/ Y% o( e // order of iteration through the `heatbugList' will be. F( y0 w f1 D
// identical (assuming the list order is not changed# T) A) d2 s0 \% B9 v
// indirectly by some other process).
; o+ h* X$ B6 U* o9 ?6 W 2 M! ]2 S% h/ g/ n* N* }
modelActions = new ActionGroupImpl (getZone ());
@( S: g F! o/ o8 e1 j. \& l) A/ t; Z" j, G- q. ]
try {
. G) K# v$ e; C" `, ]! K' s modelActions.createActionTo$message/ x5 |5 N& B6 d/ p0 `3 M. `
(heat, new Selector (heat.getClass (), "stepRule", false));. Z4 }3 M( I0 S7 _ N3 b
} catch (Exception e) {
5 |4 K5 w9 k3 ` System.err.println ("Exception stepRule: " + e.getMessage ());
3 n1 k/ N1 A. T3 K, `! U }
3 T; H- x; H2 |% l. U$ G: O7 B3 X' q+ X+ u3 j( [: m Y3 ~$ M
try {# g# h+ G: H4 i3 E
Heatbug proto = (Heatbug) heatbugList.get (0);3 g) x3 Y/ M/ x% ~: }8 p' a& g8 h
Selector sel = 7 `; u: y- H& F# z
new Selector (proto.getClass (), "heatbugStep", false);
) D; ^# A g6 A4 K8 `6 ~8 f actionForEach =9 o& C7 c, Q, V9 y
modelActions.createFActionForEachHomogeneous$call
0 y. j, K& ]# @0 k u# h1 M: S0 { (heatbugList,
( C2 x' s8 z2 _; E new FCallImpl (this, proto, sel,( g$ C$ d4 ?; {: z" B
new FArgumentsImpl (this, sel)));3 F4 s+ X9 T* w( S: j, D
} catch (Exception e) {
2 R3 g! m% C! k$ H% j7 ]6 a2 I e.printStackTrace (System.err);
, a& a8 l9 w6 S7 v. B( e } [" B0 U6 l% L8 O: e: K
; G5 H; M' u- V4 { ^ syncUpdateOrder ();
& e$ J! ^" I( o: C
3 _" @" ]' W/ [% o try {
: Q) m& Y/ [- y- d modelActions.createActionTo$message
( G* ]$ O# L2 q0 R1 P5 A (heat, new Selector (heat.getClass (), "updateLattice", false));
8 N/ H( f" {3 h- e3 ~/ p } catch (Exception e) {8 A# v, Z P* I! S" v: q
System.err.println("Exception updateLattice: " + e.getMessage ());
0 t- r" X6 ]$ r }
$ Y2 \3 t8 }6 n& I+ y2 o 9 g# L, \! z' R6 i. q! ^# D, r
// Then we create a schedule that executes the2 M; r% Y f5 x0 [. o+ ?) X
// modelActions. modelActions is an ActionGroup, by itself it# k7 \3 F; F/ P& b/ W/ F
// has no notion of time. In order to have it executed in
# b# b: c+ @" d1 C' p5 h // time, we create a Schedule that says to use the; b, c8 |' ?5 W& }( p3 J0 p0 U
// modelActions ActionGroup at particular times. This( Y, {, o) c @9 k' v
// schedule has a repeat interval of 1, it will loop every2 C* z1 x; t* |# @5 v5 ~
// time step. The action is executed at time 0 relative to0 J) ?. H' O5 e ^( s! C- p
// the beginning of the loop.) z, f* V. z* k
+ R3 Y% f. u3 l1 z // This is a simple schedule, with only one action that is6 o/ J# H1 _ R, I9 a
// just repeated every time. See jmousetrap for more
3 I6 @/ O6 T3 l$ z; q- j5 {/ G // complicated schedules.& v. H& d6 \; `8 b8 z" o, T
7 V, y3 X( D2 b; i8 n: p1 U
modelSchedule = new ScheduleImpl (getZone (), 1);) Z% o+ Y/ q/ Z4 z( I2 _
modelSchedule.at$createAction (0, modelActions);7 [0 @ D+ p# g2 c+ |) K
8 c5 o- [1 `! u% V1 O return this;/ U2 q- ]1 |" q. t
} |