HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% ]0 R8 x" Q6 l
# l$ [ g% w/ q" L4 L public Object buildActions () {
5 z* O0 r4 r- t+ J( l+ c7 C4 d0 h super.buildActions();4 A3 b# g9 m' ^$ C n% j$ j
% T$ R; b+ U6 ^0 |2 ^ // Create the list of simulation actions. We put these in
6 ` l& T, k: f" T+ [( u$ q% Q& f // an action group, because we want these actions to be
$ ?% C; k. C0 r% U // executed in a specific order, but these steps should% t) p0 |& r6 M. z. h
// take no (simulated) time. The M(foo) means "The message% k3 _2 p9 ^: j
// called <foo>". You can send a message To a particular% ]+ m, k) u3 i" a; [: y$ h! @
// object, or ForEach object in a collection.
/ d) R# P5 }* ^$ g5 h " a- x# {9 G1 j4 [
// Note we update the heatspace in two phases: first run
. d0 y/ C' Q. b! ?3 H Q // diffusion, then run "updateWorld" to actually enact the
( j- c* w" y$ z. [' g6 C // changes the heatbugs have made. The ordering here is0 e- N- G8 O- K0 P% g
// significant!) @* P0 t; c0 Y1 X6 `: o
1 r( \4 p1 `* C' o // Note also, that with the additional
( l1 r5 Q1 J1 _2 g! ?. W ~( t // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 e9 p' s" g+ Z# m8 D // randomize the order in which the bugs actually run+ P h% J# G( D! ]6 e* @! S
// their step rule. This has the effect of removing any+ T$ x! ~' j: A* X. J
// systematic bias in the iteration throught the heatbug
: p, d6 w, S0 K* k. {9 @ // list from timestep to timestep
6 [2 _. x; B8 w% b' ] + L3 n8 u& p9 e" r, Z2 d' j
// By default, all `createActionForEach' modelActions have# V3 ]2 b' J }3 a# A8 c8 a3 s
// a default order of `Sequential', which means that the/ {( J% F! Y! i9 j+ }1 A/ J8 s7 j
// order of iteration through the `heatbugList' will be
" Q. Z0 w7 a; U# W- h/ l) a // identical (assuming the list order is not changed7 H! f H3 q) K% y0 g
// indirectly by some other process).
( X2 x/ b. ^, u* M1 c" z
! b P: ]( W, Z: X1 `: t; }- Y modelActions = new ActionGroupImpl (getZone ());* ?, [7 s+ G# R2 K; o
8 e. z! _0 ^7 z" |+ Z
try {$ C% o, C. Q# B; A* {, X
modelActions.createActionTo$message3 u6 d& q; Y2 r: e: g
(heat, new Selector (heat.getClass (), "stepRule", false));( i/ `( v! I# U) |$ {
} catch (Exception e) {& v7 @6 L) {* v: b/ E" y
System.err.println ("Exception stepRule: " + e.getMessage ());, {6 X' O2 W) L# ^. _) x
}3 ^, N# z- k% D, `0 x) a
9 O7 ? @4 P1 e) Q" J8 A try {
9 p' r8 ?: L/ O, L$ S; ? Heatbug proto = (Heatbug) heatbugList.get (0);
# ?6 ?. D. @7 \4 A% W. u; A Selector sel =
! H& y1 B& A# \+ k f) k new Selector (proto.getClass (), "heatbugStep", false);
3 S* F' E6 a# g( g actionForEach =- n0 |5 D9 P! h# J- z
modelActions.createFActionForEachHomogeneous$call- [, N6 c8 Y# a* W% S
(heatbugList,
5 k4 o z6 c5 V) e$ m$ t2 _- h new FCallImpl (this, proto, sel,- D* p2 E- S. R) [1 A% _. F) v5 j
new FArgumentsImpl (this, sel)));- T. u4 q" x2 [$ T+ R
} catch (Exception e) {, Z0 O ]0 C1 k
e.printStackTrace (System.err);
2 M7 h v4 l7 C }. t' f& D- \+ r$ M- w
$ w" E2 A* G' W% Y7 N
syncUpdateOrder ();
2 T* v# V6 x. @. r0 r; o- x3 G, P' f
: g* ]) b$ }$ E* l( @/ E7 w) h& b: X try {
7 D: c( Q2 w+ {( w- `- z modelActions.createActionTo$message 9 O( i8 [0 c1 V! z% p
(heat, new Selector (heat.getClass (), "updateLattice", false));8 H5 z' q* V' j2 `, i
} catch (Exception e) {8 |. a% ]4 R; X3 Y) K$ @
System.err.println("Exception updateLattice: " + e.getMessage ());! y; @4 }. c" R" ?& {
}
2 ^9 }, z3 U4 _- D( F # b3 T2 a3 C2 @. F! d1 Q7 x; M. u
// Then we create a schedule that executes the
2 _% w; n: N$ d" Z* B // modelActions. modelActions is an ActionGroup, by itself it! e8 t v1 H9 \. u& W0 i" r, v3 f8 E
// has no notion of time. In order to have it executed in
& ?% E$ t1 x7 Y" a* k // time, we create a Schedule that says to use the
. t$ g1 a4 ^) ] // modelActions ActionGroup at particular times. This
1 _" k7 m. k, g0 k+ J // schedule has a repeat interval of 1, it will loop every0 U$ u* [, d0 L1 U% @& Z; w
// time step. The action is executed at time 0 relative to1 J C+ ^2 @% E
// the beginning of the loop.
" s/ M2 I' h4 A. M( _. C; k3 t- t" c" |" K& c2 Y% P) Z) {
// This is a simple schedule, with only one action that is
# C, e+ v3 _8 J0 b9 j: } // just repeated every time. See jmousetrap for more$ N, K$ T* Q3 A9 V% s& L4 B4 U
// complicated schedules.6 c; ~! Y; y6 ]+ y9 l7 z$ K$ K
" |! U3 X- F: q modelSchedule = new ScheduleImpl (getZone (), 1);( k& H7 C5 i2 N. [% ]) c; s
modelSchedule.at$createAction (0, modelActions);
$ n3 h7 y7 X: O) L' g; I+ @
: W" i# F0 t4 w return this;
+ d: f) b7 V$ h( [ } |