HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ J, D' a- R; j) ]& O
! \9 r! P' h3 H4 }1 t8 i: o! V
public Object buildActions () {4 A0 G' [2 F4 U; t- l/ P5 X
super.buildActions();
* R8 F3 F: A2 b0 S# z
7 V5 | g! U* T6 z0 S* X: Q5 b // Create the list of simulation actions. We put these in
0 W! q# R& R+ N; A6 h1 X! S // an action group, because we want these actions to be; H) _$ w9 @- C
// executed in a specific order, but these steps should
) r6 p$ ^" e5 f% F // take no (simulated) time. The M(foo) means "The message* T1 e8 g5 h" P, q- }6 J5 ?6 s+ |
// called <foo>". You can send a message To a particular
y% \1 h: i- t% F8 J4 Q3 K9 K // object, or ForEach object in a collection.
* v# [2 K$ C1 H' H
+ g: I+ A1 r# w$ t! A9 ^ // Note we update the heatspace in two phases: first run
3 _+ g+ S9 a# N2 M9 Z! \7 @ // diffusion, then run "updateWorld" to actually enact the0 c! y0 A3 _, J5 P3 a3 G" r: b
// changes the heatbugs have made. The ordering here is5 k3 A9 x# A6 y y& k( a" C
// significant!: m8 g" \, p9 Y! [0 e2 Z
! P- O! Y6 u; ~2 }( |: U
// Note also, that with the additional
* Z* ~& Z# h! `/ }3 ]- A // `randomizeHeatbugUpdateOrder' Boolean flag we can7 C& E! R1 t0 H
// randomize the order in which the bugs actually run
9 n% i, L7 }8 C) l) h // their step rule. This has the effect of removing any
r& S6 e1 n( w" U( t) J, e8 o // systematic bias in the iteration throught the heatbug
* P0 N7 U3 d& E, D7 N" G4 p" \- t // list from timestep to timestep( ^. a8 m2 d- U O1 Q4 x* G9 `
- C( Z+ h5 f/ k/ E: t, k // By default, all `createActionForEach' modelActions have
" c/ t3 g, f3 t4 T' Q // a default order of `Sequential', which means that the
; s) Y' Z8 U) }" D Q' S // order of iteration through the `heatbugList' will be
. a, A* [: p4 U( a6 v; G7 s5 v // identical (assuming the list order is not changed
/ m. Z5 V/ t5 z2 ~; Y m0 | // indirectly by some other process).
8 q$ r9 C O0 \ w" w# u 7 _, y; H- U; W1 s8 s
modelActions = new ActionGroupImpl (getZone ());
) ?* m/ S) H5 T2 ~$ H) b
/ R1 P5 L2 ~- g4 V5 M- t try {
4 Q0 C; x/ r' X+ B modelActions.createActionTo$message
5 Z$ H9 v1 K6 w* _ (heat, new Selector (heat.getClass (), "stepRule", false));* M9 E4 A L' |. I% D8 f5 x: q
} catch (Exception e) {
# Z! f& i; ^7 U: w2 X- R System.err.println ("Exception stepRule: " + e.getMessage ());- m8 ]* ]. Q$ o: \3 G
}& z0 Y) `' ^$ k
4 [3 d) x; }( s4 _7 Z try {
5 U# ?( n4 E% w3 X& A3 E Heatbug proto = (Heatbug) heatbugList.get (0);$ ~* [: Y/ [' R' [
Selector sel = 7 m5 y7 G1 r$ o5 C% E$ L2 e
new Selector (proto.getClass (), "heatbugStep", false);
0 e1 I& \9 _& I$ `. j& r actionForEach =
; f" ~' c/ e, H" t8 `" h modelActions.createFActionForEachHomogeneous$call
$ }" a, O& \. ~6 X- p* X& M) H (heatbugList,
, q( M% ?7 ?- O3 r# C& ] new FCallImpl (this, proto, sel," ?. i2 }; ]4 {) T" N6 v1 t, W- N
new FArgumentsImpl (this, sel)));
( |- H( H! j, o: D } catch (Exception e) {; f0 \& I5 C, d( o9 M5 R1 h& c
e.printStackTrace (System.err);
3 G _+ U t& S1 i+ G }
a& H4 R! A( f a6 N ) V* ~2 C8 ~, b) z0 ^- h
syncUpdateOrder ();
% u% b2 ~# u" R% T* p
S" U% w* |3 A0 U7 L* t) d try {1 j; r9 k1 ]. W' `$ R$ ^6 o# W
modelActions.createActionTo$message
& W: o# A/ |+ \: J' T (heat, new Selector (heat.getClass (), "updateLattice", false));
) @6 c/ {8 x/ K" Y1 ]' t0 k5 T) Z } catch (Exception e) {7 o( f# U* e1 d! b3 l
System.err.println("Exception updateLattice: " + e.getMessage ());
0 X" i x$ k* N' |* t- c }1 B6 n7 k$ z! h1 y
4 x; E4 R) Y+ X. f; ` // Then we create a schedule that executes the ~& b5 l# F7 H" t6 H
// modelActions. modelActions is an ActionGroup, by itself it) T& k6 }- T& K' F( N# S' r
// has no notion of time. In order to have it executed in
+ n9 E; `& E3 N" ?" r // time, we create a Schedule that says to use the
: K2 V( X% v, f& K. P M // modelActions ActionGroup at particular times. This
5 T: z: ^9 w* [' h# F; x) v, E6 q // schedule has a repeat interval of 1, it will loop every
. y# N0 T% d- b4 W& s1 ]! R8 ~ // time step. The action is executed at time 0 relative to4 ^. \0 l4 T8 g6 u; ~
// the beginning of the loop.* a# V* B- Q) ^% N
7 u8 T- @7 V5 i8 C // This is a simple schedule, with only one action that is
" |" R7 C& D3 B! n& E! } // just repeated every time. See jmousetrap for more4 G4 S- f9 `- m2 @+ _1 Y
// complicated schedules.( w% a& N, D- I8 T8 n
, Q- i( b/ S( J3 n! S6 x) S6 k modelSchedule = new ScheduleImpl (getZone (), 1);* `7 e" S- h* a1 _0 Q. l% S
modelSchedule.at$createAction (0, modelActions);
4 c I- b4 t; t# ~
+ h! n F2 J2 Z return this;
4 E g" Z; h% Y6 p0 O) G, C/ v } |