HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 q& u" m& G7 I7 a* c% y/ d
% T& Y. m1 j9 O2 V public Object buildActions () {" v1 V, s# M! B
super.buildActions();
, K3 Y' Y+ {8 N
S3 t2 _0 |% ^# `2 W! F& ?4 v; M9 Y // Create the list of simulation actions. We put these in
' D6 W& N6 t1 o2 J+ O, ~ X+ c // an action group, because we want these actions to be/ t$ ]. B7 x! U: O" Y* f
// executed in a specific order, but these steps should0 N" s& L: B0 J4 g
// take no (simulated) time. The M(foo) means "The message' Z7 S. W( J! R7 k8 P" n
// called <foo>". You can send a message To a particular
" D% I- s) T! H6 ] // object, or ForEach object in a collection.: L$ ~+ j: T* j7 j
/ O; n9 }, y3 T5 D; n% { // Note we update the heatspace in two phases: first run
8 V% n7 `7 @8 Z) u, ~ // diffusion, then run "updateWorld" to actually enact the
) K: m7 Q v' L) G9 R // changes the heatbugs have made. The ordering here is& [" ?8 n) y7 J
// significant!
{, Z! r8 k+ ?6 N" l! v* ]
* @: n9 @6 P" w( T // Note also, that with the additional
) r0 U E2 e/ L \ // `randomizeHeatbugUpdateOrder' Boolean flag we can3 ^; l+ P' {- |8 v5 N6 b
// randomize the order in which the bugs actually run
5 g: n) i7 T5 s& p1 G) B$ u // their step rule. This has the effect of removing any
- g* R1 q! J+ o0 P* T6 k6 J // systematic bias in the iteration throught the heatbug
0 p1 V! [9 _( {0 V // list from timestep to timestep
# z* ~- G) a8 n4 D/ I. G X: m9 S ; o' f; y5 u+ }6 Q: A$ u+ C) u
// By default, all `createActionForEach' modelActions have; G9 Z3 z' ]/ d4 ?
// a default order of `Sequential', which means that the
0 r8 T" a; B/ L( F, y' D& I // order of iteration through the `heatbugList' will be: r4 n( A# a( Q: f) T* I$ R
// identical (assuming the list order is not changed
$ e2 ]3 o3 b" r2 } // indirectly by some other process).- {: C, H$ q' O( p7 Y
5 p- n0 ]8 q4 t8 D4 {. [
modelActions = new ActionGroupImpl (getZone ());6 E7 g' n( y9 V; F( U$ V$ m
5 U8 t0 I) ~6 h( M' h try {; D4 [, G/ L3 X2 a& P
modelActions.createActionTo$message
" q+ G& i- e N: P8 S( d* J (heat, new Selector (heat.getClass (), "stepRule", false));0 j, q4 o8 V( l0 a/ x
} catch (Exception e) {. {9 Q, B5 @" \9 p& ^! g& l6 Y$ R
System.err.println ("Exception stepRule: " + e.getMessage ());" \" T% a; F/ k* y' T5 J
}0 K c$ T9 }0 s! m
/ D$ w; y' @8 T% _- @ f* B try { q# }7 Q( h+ J# K* Q
Heatbug proto = (Heatbug) heatbugList.get (0);
x z) M6 `) F# k. o6 X0 p U6 H Selector sel =
: h. }( e$ b) K' ]7 v new Selector (proto.getClass (), "heatbugStep", false);: N$ Z4 S; h6 ^+ w
actionForEach =
5 x9 a7 {4 p) W8 u2 m9 q modelActions.createFActionForEachHomogeneous$call, C8 p( E; w, l7 k
(heatbugList,
0 a9 L$ v4 c3 S% ] new FCallImpl (this, proto, sel,
& V( ^) s# j H new FArgumentsImpl (this, sel)));
( X$ ?2 v' s; X: x } catch (Exception e) {
# _( z' d8 B7 s0 f; q( a e.printStackTrace (System.err);
F( [% V: R6 p$ g! o1 u9 g8 y }
1 [6 R3 I- R% g2 P9 b
s( L4 r0 h5 r9 R! n* q: m syncUpdateOrder ();2 P: W6 }" _7 h- D8 V
G) h7 Z6 m& E# Z6 k% _7 H
try {
% l* n- N- V7 r- q modelActions.createActionTo$message
% r6 N; _! F8 J$ @ (heat, new Selector (heat.getClass (), "updateLattice", false));
, @ F( `1 b$ ^, }9 f } catch (Exception e) {
( ]/ X/ X" m9 C0 V2 w System.err.println("Exception updateLattice: " + e.getMessage ());
9 K# \' O2 \) {' M* G7 }1 Y9 _3 W }+ ~& b/ Y+ {+ e) W/ Z
4 E8 v! ?, z- J# I9 l% x$ {
// Then we create a schedule that executes the
/ ?. |, L% B% x/ j9 D5 T0 X // modelActions. modelActions is an ActionGroup, by itself it6 m9 l M5 f/ N8 Z- Z' H7 t1 O/ G' ^
// has no notion of time. In order to have it executed in+ B" P' Y% I3 m( W6 P
// time, we create a Schedule that says to use the$ ^8 I) _1 {9 P
// modelActions ActionGroup at particular times. This
7 g7 J: F; x5 x# g2 r5 o // schedule has a repeat interval of 1, it will loop every
5 \& \1 t/ o9 x4 Q8 ^8 _ // time step. The action is executed at time 0 relative to" w' S. v$ z( g" X- l& i, M9 H! h0 ]6 z
// the beginning of the loop.1 J. {; v, t" c$ t
2 k; I2 `9 j9 }5 }) n* ~
// This is a simple schedule, with only one action that is
3 k. y3 `* T* [* C // just repeated every time. See jmousetrap for more+ L9 Q4 y, `$ c7 I# J3 S
// complicated schedules.
! P. _+ Z/ Z1 i4 F- U $ z" o: d$ B& z3 k6 Q2 A
modelSchedule = new ScheduleImpl (getZone (), 1);, w+ ?' s. P8 R# B4 v1 p
modelSchedule.at$createAction (0, modelActions);
7 T" W, e' h" ]) |3 W& v7 x
$ I. n8 c% ^. ^. x3 m return this;6 u: M/ M+ g8 r
} |