HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# V5 [# G) t) a
' y3 \* K* E4 y t% k# n) b& l% ] public Object buildActions () {6 t, |. ~6 y7 [ G# ^9 ~ c
super.buildActions();% Q$ X& g. F% x* z5 [5 [% ?
# U7 R& j; I2 {0 r
// Create the list of simulation actions. We put these in. @* F/ |0 M6 ?
// an action group, because we want these actions to be
. a: E4 i+ P4 K5 B" ] H8 [; J // executed in a specific order, but these steps should
8 H5 i: o' \! N- x( T // take no (simulated) time. The M(foo) means "The message
8 U; A6 n9 _) O9 d // called <foo>". You can send a message To a particular5 n+ B1 O- W7 c! s2 ^1 @
// object, or ForEach object in a collection.# @9 B2 P6 y4 F0 T5 P9 g
( j* R; {) `6 \! ?3 a& Z // Note we update the heatspace in two phases: first run. S( T' e& o4 Z' L K3 X
// diffusion, then run "updateWorld" to actually enact the5 t! k; M& U8 Q1 j7 B
// changes the heatbugs have made. The ordering here is
0 K) {0 k5 X+ H! ^! i6 U& e; `- n ^ // significant!
; |& @; D3 M0 _5 f
+ l3 G; \. S" R2 F3 c& T4 ~ // Note also, that with the additional1 k# R" z% Y6 C
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 {& s e8 U2 i; o* c // randomize the order in which the bugs actually run: W: e9 r7 Z! g7 I) T
// their step rule. This has the effect of removing any6 R5 L7 |- |$ i2 W, X
// systematic bias in the iteration throught the heatbug
! H! \ U% S3 F. j6 E // list from timestep to timestep9 C/ N$ Q4 L* m! e4 H
: K* s; `$ \6 U; D; g6 J // By default, all `createActionForEach' modelActions have L$ o+ S7 v4 D8 M5 I
// a default order of `Sequential', which means that the- R) r& V8 M$ m* Y( G, C8 h
// order of iteration through the `heatbugList' will be- n. u* ~' n( [0 W7 @6 _
// identical (assuming the list order is not changed
0 d0 S4 [! f$ a" t3 h+ ~ // indirectly by some other process).
) R! q, Z8 n6 o/ B . G8 k! _7 a3 A @9 k, I
modelActions = new ActionGroupImpl (getZone ());; Z3 C- y# K+ `, m
. k: y: U+ w1 _; { try {" y7 n9 @( P# a" k9 F# Z
modelActions.createActionTo$message- d& m7 B$ J9 l7 j* Z- X
(heat, new Selector (heat.getClass (), "stepRule", false));
' w+ Q$ ?# v. N$ B+ {8 o } catch (Exception e) {
' f/ Z+ q2 W, Y System.err.println ("Exception stepRule: " + e.getMessage ());) s3 `; }0 L* c9 a9 ^" J
}) y( b6 y9 Z$ A( `
$ }5 d5 C/ W* d, W6 M" j
try {6 Y& A# t3 D/ m9 K( I7 L0 N: I5 R- o
Heatbug proto = (Heatbug) heatbugList.get (0);! W2 l" e, S7 p
Selector sel = * g$ m7 P& s. i) K9 ]/ e- ^8 ^( u
new Selector (proto.getClass (), "heatbugStep", false);7 f. { q/ n5 U# o* q9 J$ {
actionForEach =$ f K7 _; H" H* Z! b( J
modelActions.createFActionForEachHomogeneous$call
$ a3 ^! R' m9 s (heatbugList,% q, Q# V# @) m! S5 i4 V, u2 T
new FCallImpl (this, proto, sel,# L+ e7 ]: Y( ~& k7 y
new FArgumentsImpl (this, sel)));% a; X7 _, }& D6 x7 R b
} catch (Exception e) {. z7 p# Z L+ [0 z% G8 \/ Z, ?6 }8 q
e.printStackTrace (System.err);
# D. \0 k4 |5 k( ] }
6 j. ^, b9 h8 U. H 1 N. m; t" F: |" w, O1 d+ u
syncUpdateOrder ();
8 ]0 C) q7 H- |2 |
' @% G* G! ^% v) o( ? try {
# Z( A4 e# w0 O+ ?* s5 W- }: A9 L modelActions.createActionTo$message 1 ^/ P4 S: J6 a
(heat, new Selector (heat.getClass (), "updateLattice", false));& I/ i! c# B1 H$ m. l
} catch (Exception e) {
0 q0 L4 g0 l) o& S$ d& R System.err.println("Exception updateLattice: " + e.getMessage ());
+ y& [/ {; A! L, f2 u) G7 } }0 y% ^0 f: m3 j$ q' f. Y
" o7 X1 p0 d3 T! Y" x, { // Then we create a schedule that executes the
7 ~/ e- s# e8 I6 i9 M$ d& H/ g // modelActions. modelActions is an ActionGroup, by itself it
. U7 z3 _! L+ ~& A2 z' N // has no notion of time. In order to have it executed in
0 t+ ~8 [5 Q' k // time, we create a Schedule that says to use the1 n5 g/ g+ ]6 `& U0 x# ^
// modelActions ActionGroup at particular times. This4 v6 R0 v- K3 P; w! B7 a
// schedule has a repeat interval of 1, it will loop every
. E( ?4 G. B2 X f7 _2 _ // time step. The action is executed at time 0 relative to: J( W' W: S" ]
// the beginning of the loop., q4 D$ `! J9 W$ Y+ }
* g4 h1 j; x- V0 ^3 z! X2 p
// This is a simple schedule, with only one action that is
& X% o2 K& H- B S, E9 T- `! _ // just repeated every time. See jmousetrap for more
1 g$ M2 a3 M! k# _: l // complicated schedules.
+ Y4 t) v& V( B! S * \1 i- h4 |( f) Z2 i, e$ ]
modelSchedule = new ScheduleImpl (getZone (), 1);$ C$ S3 `$ B/ r. _% j
modelSchedule.at$createAction (0, modelActions);
0 Y# u/ b! N0 B / M9 Z1 |. F/ e+ R- N
return this;- O2 E1 t8 S4 s
} |