HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* Q$ ~9 l2 V) F1 j( o, D$ B. M9 t) E3 `. [+ I; y& X3 V& Q4 ]0 Z
public Object buildActions () {
$ {! ?7 l. t% i2 K* J! d/ U super.buildActions();1 P6 V2 a: z6 F- j
8 H" G5 L0 i; U+ e, @8 h // Create the list of simulation actions. We put these in* K% _5 Z$ ?9 y
// an action group, because we want these actions to be
9 z& @! X4 f4 K) i* `3 r // executed in a specific order, but these steps should
, V- f* U4 k5 m$ @ // take no (simulated) time. The M(foo) means "The message4 E& ], `8 C- P0 d
// called <foo>". You can send a message To a particular6 q7 i& x5 ~1 Z9 Q) {( T
// object, or ForEach object in a collection.
# c, G# Y. y+ c) }$ f* z" g " O. m- {8 A1 H! t+ p$ \
// Note we update the heatspace in two phases: first run, _& \; D$ X9 J3 W/ \' m! K# n
// diffusion, then run "updateWorld" to actually enact the. m$ y, k. r" h! B4 H! [! u
// changes the heatbugs have made. The ordering here is( ^: R7 m4 p, B6 s3 t" i1 L5 K4 R
// significant!6 e7 {! G5 {# V1 J1 E# w4 N
q1 k+ b% r/ C. n- ^" k0 Z6 X" s
// Note also, that with the additional- I- ~) a/ Y8 v- A( d8 O
// `randomizeHeatbugUpdateOrder' Boolean flag we can: m( M8 n# V; `* B1 M3 |
// randomize the order in which the bugs actually run/ j" \0 j$ v; l4 s, G9 V
// their step rule. This has the effect of removing any
' c& s! U0 v# o# L, i% p // systematic bias in the iteration throught the heatbug8 F5 ?* u$ N/ ~9 ?0 a+ f3 _
// list from timestep to timestep3 F5 A& ^: X- `* N/ R! _# }
, J! j, B: S( ?, Z // By default, all `createActionForEach' modelActions have' P5 E9 R# K0 b' U
// a default order of `Sequential', which means that the0 B2 y: `( A" Q I
// order of iteration through the `heatbugList' will be
* |: L. s+ {% m1 `, [6 U // identical (assuming the list order is not changed: ~& C3 `+ p9 W/ W6 B% T& _" D
// indirectly by some other process).+ H. f! J; H/ e7 u" p* F p9 q( D
! I$ P; v8 T- a+ N- ] modelActions = new ActionGroupImpl (getZone ());, c9 q* Q8 ? x$ r* y9 S
8 k T$ Y& o, m @% U
try {" o. W4 ?7 S$ t0 Z- j
modelActions.createActionTo$message
% U! \* N0 {8 K- | (heat, new Selector (heat.getClass (), "stepRule", false));
3 z0 S& D3 N3 o+ o' s* f0 r } catch (Exception e) {6 _' y: a" B2 f
System.err.println ("Exception stepRule: " + e.getMessage ());
/ m+ h2 X, g' C) G0 ^3 U }4 `1 h/ b( g+ l" l, l4 C2 ^
0 d9 \, z" m) ]: C4 q try {
! G3 L: N A3 u0 V& i# S Heatbug proto = (Heatbug) heatbugList.get (0);
6 P" I% `) c X: B# g$ c5 m Selector sel =
! i: K' d2 J5 q4 p& H1 ~4 ? new Selector (proto.getClass (), "heatbugStep", false);
, a. e7 V2 O6 _ actionForEach =
- X! Q+ s# [, |) [0 S3 [( p8 O modelActions.createFActionForEachHomogeneous$call2 i% R4 F' f/ r) h+ m2 b0 ~
(heatbugList,) z* a; o- f7 k9 A
new FCallImpl (this, proto, sel,3 d% v, a8 P7 x. A$ n! K6 K n
new FArgumentsImpl (this, sel)));
) ^( q$ o% h. j9 m* q! v } catch (Exception e) {
" f+ @0 t; [" v% F9 b e.printStackTrace (System.err);( O3 A$ B/ w+ S: @
}
- X& O# c0 X+ e, k+ M 5 X2 E" a& j/ z0 `% K5 o
syncUpdateOrder ();
7 R2 f: t/ t9 L4 A
6 @7 N2 r. [9 k8 O% v; F- o1 y+ k try {! [) v( [; J; }- A
modelActions.createActionTo$message ' h; w; q2 E. T4 w S) `
(heat, new Selector (heat.getClass (), "updateLattice", false));: \ M9 I1 p3 v$ C* \' C
} catch (Exception e) {. f( |$ h& U6 G; F% k
System.err.println("Exception updateLattice: " + e.getMessage ());
7 r# Z+ z% c E7 R4 t }
0 F- z V# Y r5 Q/ T @ 7 c* F% n/ G5 h* `, @2 E! D+ {
// Then we create a schedule that executes the& @) L/ s4 B s9 s/ w7 [$ Z: a
// modelActions. modelActions is an ActionGroup, by itself it
6 y8 G. P( f" W // has no notion of time. In order to have it executed in2 d. e6 S6 |/ N3 W9 z# Z" I
// time, we create a Schedule that says to use the
, x; y( }% O& M; O // modelActions ActionGroup at particular times. This
' Y! N7 G, N0 [6 g2 }8 g // schedule has a repeat interval of 1, it will loop every, B' X F4 P, W; _
// time step. The action is executed at time 0 relative to
/ k) C* @ B8 L0 y. ?& p; ?6 Z // the beginning of the loop.; ~: ]7 m/ ~* Z6 f1 @; s
5 N1 r3 a) Q& F) g% Q8 }3 P+ b' r
// This is a simple schedule, with only one action that is
% ?- c0 }2 P' o9 n U% ^) A0 t // just repeated every time. See jmousetrap for more
, C9 j; q) Y3 i/ n; o // complicated schedules.
9 ~, B" M: f7 ] 9 j& ]& @! v: _- d. D$ _, r" ]
modelSchedule = new ScheduleImpl (getZone (), 1);; z: f6 B- w% E
modelSchedule.at$createAction (0, modelActions);
! r) D* d2 F- S6 K
2 e* e' ]9 ], F" ^8 M, v) ? return this;
X) f' ~" _! h6 t } |