HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 x- u- i9 @0 D4 w9 J0 q
& } p* L: \+ G, ^0 x8 P
public Object buildActions () {* z F& f2 ]; n l: {! f: R
super.buildActions();
$ D" H3 |: D* e; b$ i P
4 P. ~' [: B$ q* Y& G // Create the list of simulation actions. We put these in1 i# r& q* X: {5 S. X! N3 x5 x! Y2 k% U u
// an action group, because we want these actions to be6 O; m1 p: H, ?* { A
// executed in a specific order, but these steps should% M- J% {. V9 C& v' J* H' V
// take no (simulated) time. The M(foo) means "The message$ |7 I* o% i N4 E! u
// called <foo>". You can send a message To a particular
) c# D( e* p" m- ` z1 m; @ // object, or ForEach object in a collection.
2 h) Y. Q4 e5 U4 b7 j. |4 S- Y & a3 u: C' ~! Z
// Note we update the heatspace in two phases: first run
3 w2 Y. t$ m. M; z // diffusion, then run "updateWorld" to actually enact the2 c4 |" f: E2 d
// changes the heatbugs have made. The ordering here is
) h' v3 P% {8 ~ // significant!4 s; d! Q4 d, X$ Q8 }; v7 T0 i
9 j" _+ l. G9 X5 A: ] D! o4 g // Note also, that with the additional! o: `" F* F$ [, n. t6 v
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ G) h" U8 s( A+ _2 e4 i' N% o
// randomize the order in which the bugs actually run
$ g+ x7 U1 l& P' \# [# i9 ^9 {8 j // their step rule. This has the effect of removing any
( J* k& H/ a0 _9 @ H // systematic bias in the iteration throught the heatbug
' e0 K1 t1 X9 }( e: S( y7 W+ F // list from timestep to timestep
( d( ~/ [( c t2 F
8 [3 P3 i5 z: C S' [ // By default, all `createActionForEach' modelActions have& c4 f9 K! Z |6 w
// a default order of `Sequential', which means that the
; u, n% n5 |8 s- s+ L/ \' b // order of iteration through the `heatbugList' will be
" I+ i7 ~. R6 k5 R M // identical (assuming the list order is not changed! Y& O- ?) ^- f; C. w& o
// indirectly by some other process).* d1 Z! d9 a$ H$ }8 `
6 m. A5 C! u) g! S
modelActions = new ActionGroupImpl (getZone ());7 m0 ` I7 B: z6 a" k# b% |
) @/ F1 t( M. N try {- ^1 ~9 i/ U9 b, b, ?& ^ S/ P5 d5 Q
modelActions.createActionTo$message
0 ?* v8 j: K: j1 k/ C3 _: Y; O (heat, new Selector (heat.getClass (), "stepRule", false));1 J$ J; s( C4 e8 v! u# ]% c- \
} catch (Exception e) {
8 h$ O G8 p( D$ y) E- w3 D System.err.println ("Exception stepRule: " + e.getMessage ());
4 d: U/ |/ g" \" G }
V4 C0 s, A! b8 s7 r9 F7 c
) L4 P& g4 @1 X* R+ J, s, j try {
" G7 c' S& g$ J+ n; h4 K8 ^ Heatbug proto = (Heatbug) heatbugList.get (0);' @2 _2 T3 [* Y0 r) A% J
Selector sel = . `/ i( O; P" A: v. b% m' ^( j. r
new Selector (proto.getClass (), "heatbugStep", false);/ A' C7 [' Z5 B8 n
actionForEach =
Q! {( f7 D" ?$ x) b. G& { modelActions.createFActionForEachHomogeneous$call9 p- F) Z$ |# y- @" g0 K
(heatbugList,
! P8 a6 v; y$ s5 D" q9 D# v E new FCallImpl (this, proto, sel,( G9 i; z& I* k" Y- ?2 o, {
new FArgumentsImpl (this, sel)));
3 W8 _1 S6 d$ _ d' n/ T } catch (Exception e) {
! @" X \3 j- U$ h S8 G9 x e.printStackTrace (System.err);% K; m& r6 d5 l& X; q# D
}
* d6 h& @$ N: Q' ~5 l; O' K z* D7 d" @2 p4 @4 {, g" ?
syncUpdateOrder ();. s* A* V- U9 l4 q+ d& Y! C: G
" g I. w; i3 B; `( P try {5 D0 U1 d: |0 s' G8 M
modelActions.createActionTo$message 4 W) L1 }/ M4 X2 V G/ q' g
(heat, new Selector (heat.getClass (), "updateLattice", false));) U8 ]; G4 ], O5 M
} catch (Exception e) {4 A2 ~0 f4 m) t! l9 n& E0 C
System.err.println("Exception updateLattice: " + e.getMessage ());
) f5 w2 V6 s6 `1 }; l5 o: t% p m }
# p) H% [$ p: [% y8 K& K0 | + r2 }/ ^$ o/ V7 L
// Then we create a schedule that executes the
$ i5 n$ b! l5 T8 Z* Z // modelActions. modelActions is an ActionGroup, by itself it
, g# G4 b9 `- F$ Y // has no notion of time. In order to have it executed in
. _0 P3 C4 q1 J8 L" Z9 L ~ // time, we create a Schedule that says to use the
) Y! i$ h! z3 N4 U4 J8 ] // modelActions ActionGroup at particular times. This
5 z2 G; B1 J U1 ^- q! o7 p& y // schedule has a repeat interval of 1, it will loop every
7 ]6 C5 g/ M9 y, t% @ // time step. The action is executed at time 0 relative to0 y- B+ h1 r5 q3 A2 y
// the beginning of the loop.5 T" x7 H2 @. L& v. `
* T7 c4 g+ L5 y" X: P) S- m/ w! [ // This is a simple schedule, with only one action that is
: D7 v) [. W8 v2 p; k // just repeated every time. See jmousetrap for more
5 O5 o: h4 B9 z1 t4 {" _ // complicated schedules.# E' q- `! _8 X6 V" _0 T
" |* f+ l/ `% N4 ~
modelSchedule = new ScheduleImpl (getZone (), 1);+ o+ Z- v n, I* c' n% S; c
modelSchedule.at$createAction (0, modelActions); J: V' H/ x4 l) u/ T
2 M6 L% {0 e+ W( k* N* A return this;5 O* j& ~1 s1 W; k
} |