HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 l! O* x$ N0 ]- `2 k
5 k* k) \$ u9 Z# Z0 d9 T public Object buildActions () {
' `# P( T3 C. T super.buildActions();
; I+ F6 u3 w, d2 e & e* P. H, b" S3 K
// Create the list of simulation actions. We put these in
2 m5 E; S1 G. n7 W // an action group, because we want these actions to be/ W+ E, K7 t/ |: k; ^
// executed in a specific order, but these steps should
4 \ @( ^6 ^. R- u9 I // take no (simulated) time. The M(foo) means "The message; v, r/ [1 C- _3 @
// called <foo>". You can send a message To a particular. I0 b8 q9 f* C1 N( ?9 x
// object, or ForEach object in a collection.
* A) J- d$ G+ X2 c5 c" f, D
. ?4 l |$ K5 I" a // Note we update the heatspace in two phases: first run& o- E. I6 N! l1 z1 W
// diffusion, then run "updateWorld" to actually enact the3 d3 b0 e* w8 } r3 a
// changes the heatbugs have made. The ordering here is
4 m! F! _0 L2 f5 r2 E // significant!7 R. m: ?( @3 w: u1 A
7 ]4 V* ]6 G; @( P6 _' \7 I1 w
// Note also, that with the additional' l! l( Y& A( y( r* T# F
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 k7 J4 o" T; {1 B1 Z
// randomize the order in which the bugs actually run2 H' t/ D8 S! v! G# _
// their step rule. This has the effect of removing any" c+ Y5 d# t, a
// systematic bias in the iteration throught the heatbug. g2 b. N: g6 c0 i
// list from timestep to timestep
( x5 O5 g7 ]9 ~. `: ^, o: z 2 f2 N( a8 |: Q* l: ?8 h
// By default, all `createActionForEach' modelActions have
5 E! W/ K* G* @' B( d // a default order of `Sequential', which means that the2 _' u. B6 {2 e4 ~
// order of iteration through the `heatbugList' will be
$ z { _& j. h* o; _- w // identical (assuming the list order is not changed! ?. K8 f* G8 C' P# z1 q6 G
// indirectly by some other process).
6 W6 C) y+ e2 g 8 S- {9 v7 A1 H, K9 f
modelActions = new ActionGroupImpl (getZone ());
/ {5 x7 _8 m% h/ i* F: f9 L. V5 O u: [$ G o( ~6 \' Q* ^" e
try {! \' }$ a' G1 _% _) G( O! E, p
modelActions.createActionTo$message( I$ m! n h! }0 y& h* c
(heat, new Selector (heat.getClass (), "stepRule", false));
) q: V) m) A* P) K } catch (Exception e) {
) g" T) m) q; j" X( T- S) v9 [ System.err.println ("Exception stepRule: " + e.getMessage ());
$ H9 ~" f5 `% ~5 z6 \% ` }
+ a2 [- b- b8 c, d$ F' T7 A; X: k) Q$ b$ H
try {% K4 z. o. t2 v3 J2 B
Heatbug proto = (Heatbug) heatbugList.get (0);
, L% m- i5 S2 B4 R0 s' i Selector sel =
6 c) r# r% C u new Selector (proto.getClass (), "heatbugStep", false);
2 y; |+ ?2 p5 u, j# \( | actionForEach =7 G S4 Z& x, G7 p" a
modelActions.createFActionForEachHomogeneous$call
6 D: E; q- w0 j! t+ B (heatbugList,0 m) L0 U! o0 @& Z- ~* U
new FCallImpl (this, proto, sel,
3 G: j" a/ \! X2 u. u8 m- H/ k new FArgumentsImpl (this, sel)));, d+ p: P. }& H2 {& o( n6 ?7 u
} catch (Exception e) {
& M ? F/ V8 _0 G4 _ e.printStackTrace (System.err);* `+ I% {$ Y5 y7 I) A' q/ d' o
}* X2 [! v2 Z1 x* o+ i7 n* X3 p
9 {; n$ z6 H; A6 N
syncUpdateOrder ();
+ ?" E6 ~! o O. T( M: k* L+ i; G6 s1 {0 E* {: d+ n
try {& L! J! x& c* L5 F
modelActions.createActionTo$message
. v# R: ]' B" m- k# X3 F" T (heat, new Selector (heat.getClass (), "updateLattice", false));
3 J$ F) K& |; ~4 L1 F5 g } catch (Exception e) {9 u* J3 a# s x( [: ~) A# ^
System.err.println("Exception updateLattice: " + e.getMessage ());
6 g2 `3 ~3 H! `4 t5 q+ h5 f. m7 D }
. R% {' E- H0 T7 ?9 g2 h1 S V; G0 H 8 b7 h2 H# G$ C, C, }
// Then we create a schedule that executes the% q9 w# \+ g( T( W# b
// modelActions. modelActions is an ActionGroup, by itself it. ^5 d8 l( a# m9 B
// has no notion of time. In order to have it executed in
4 e4 e& ^: Z* W0 P0 k# ~ // time, we create a Schedule that says to use the
! d9 t+ b8 \2 v4 N3 a: {, c // modelActions ActionGroup at particular times. This
7 E1 v7 |! \' w7 _ Y) W // schedule has a repeat interval of 1, it will loop every* t: L* [# \9 d8 F! ?0 V7 g
// time step. The action is executed at time 0 relative to) W. i3 |( I1 D _% ~" V; b
// the beginning of the loop.
7 k7 R) o9 P% k, x, A; |2 c1 i; j7 X( J) Y: z
// This is a simple schedule, with only one action that is
- C4 \* c. @- ~2 W2 [" ?" k& o // just repeated every time. See jmousetrap for more
6 X0 `. d! ] y" L' h/ ` // complicated schedules.7 S! Y/ h7 o' ]0 t1 Q* P
: n+ N" C) ^0 \- Q3 ^
modelSchedule = new ScheduleImpl (getZone (), 1);6 L: R" W V& b) ]
modelSchedule.at$createAction (0, modelActions);
3 N4 U2 p( [' j2 f 9 v7 l& ]/ m6 I& \) ]
return this;3 N+ v; ^# x7 \8 v! N. g1 |3 k; ~
} |