HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ X1 N' `" W- x6 V5 _/ K
4 g- ^$ {2 b. F1 |5 W+ d
public Object buildActions () {
( K$ y' }& S8 A super.buildActions();
( J! a6 k# M7 _8 D
, h" i8 `2 h! O V0 V // Create the list of simulation actions. We put these in% Z2 ]# k8 P! ^% C
// an action group, because we want these actions to be6 r: A) B- j8 Y, b
// executed in a specific order, but these steps should, \5 X1 y. r" k% T/ u( N
// take no (simulated) time. The M(foo) means "The message- `6 j) \5 _: g/ ]/ j
// called <foo>". You can send a message To a particular
6 v. l( ?' ^2 p, b: Y: O // object, or ForEach object in a collection.
1 O B) C0 b z3 ]0 y % s( e# g3 F% |" [ P3 N( Y) |9 ?
// Note we update the heatspace in two phases: first run% `% J9 |3 c: n
// diffusion, then run "updateWorld" to actually enact the1 u, o. Q7 W4 P- A7 L# n
// changes the heatbugs have made. The ordering here is
! s5 ]4 s f0 u& ~# F- D) S# H/ ^ // significant!) b2 j% X" r3 P" W& R V
( O; E4 I+ {/ u8 z! h5 s
// Note also, that with the additional$ u# I- Z% ~+ J! u; z. O# J
// `randomizeHeatbugUpdateOrder' Boolean flag we can) F% h, f% i/ ?
// randomize the order in which the bugs actually run
. X- |4 z: a* C // their step rule. This has the effect of removing any* a( ^5 l; ?% S) q
// systematic bias in the iteration throught the heatbug h9 P! y4 w q- A8 g! p
// list from timestep to timestep
2 Z3 O3 [( H8 u' T/ p$ j # r( L5 z5 h& s O4 Z. g0 O
// By default, all `createActionForEach' modelActions have
1 ]) G# L A9 h* |& ?+ \ // a default order of `Sequential', which means that the
( o" I( _2 Y) V7 h2 ^8 j6 ~ // order of iteration through the `heatbugList' will be
: A8 B! }& q) a1 z. S5 m // identical (assuming the list order is not changed& M# Z9 A4 K3 S
// indirectly by some other process).
7 d7 s$ T0 [- I7 o3 ? 2 h K! `+ E/ q) E W
modelActions = new ActionGroupImpl (getZone ());( @9 ?4 x1 i) l
+ _* R. z9 g) a1 D2 i- F try { _7 k0 C7 @4 k9 ~' X! g
modelActions.createActionTo$message
; o y2 x! B; h! Y \6 g1 R3 { (heat, new Selector (heat.getClass (), "stepRule", false)); Y' U4 K/ _4 j1 u; R
} catch (Exception e) {
5 |; G- R+ R G System.err.println ("Exception stepRule: " + e.getMessage ());8 U9 N* {5 N. ?* n1 Z4 H+ z9 Q
}" L9 e3 I7 l" z# l
1 D0 {0 h: p+ A# a8 @* P
try {
6 y8 W! }: C' |9 ~# r" o0 U% R" y Heatbug proto = (Heatbug) heatbugList.get (0);
2 s- F& Y1 E0 B Selector sel =
" ~ j h3 X' P new Selector (proto.getClass (), "heatbugStep", false);) L. q* g R% m3 {/ H
actionForEach =6 A d# X% ]4 y
modelActions.createFActionForEachHomogeneous$call
0 Y) G$ o0 p+ D' O$ ~ q3 U1 d (heatbugList,
, J- t0 P. A& D; F new FCallImpl (this, proto, sel,
" g/ c" a2 Q" q# K2 t$ W new FArgumentsImpl (this, sel)));1 s. y; a X* Z b0 Q% O5 [6 r
} catch (Exception e) {8 C" e- e0 ]( ^' |
e.printStackTrace (System.err);8 l5 `9 r6 v! G/ L0 U
}
. r' q6 n% W2 q0 V) T! | ! h- ~$ i" N6 r$ S) G( O' x' x
syncUpdateOrder ();( q- F9 E2 |: e) k2 b$ d
. e) G7 i6 C s1 N
try {- L# P! T# q5 O2 r O
modelActions.createActionTo$message ' X% z" ? b8 |9 T0 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
( m4 x, ?1 D! T } catch (Exception e) {1 {/ f( v) Y+ M
System.err.println("Exception updateLattice: " + e.getMessage ());- n+ z ~% u4 Q; J3 [1 [! u
}0 ^ ]1 F3 O' ?+ o+ Q1 \
2 {9 `5 [/ m% t1 @4 c- C! D" e
// Then we create a schedule that executes the
! i% c0 d! \) k* E3 a0 a8 L/ w // modelActions. modelActions is an ActionGroup, by itself it) B+ D6 C) M" B2 H
// has no notion of time. In order to have it executed in$ _; l* t0 O# l5 E5 T
// time, we create a Schedule that says to use the" F8 F: [0 A% k7 ~ @ y
// modelActions ActionGroup at particular times. This5 E2 _8 m' _$ M
// schedule has a repeat interval of 1, it will loop every
1 Z/ ]0 z/ r& j. q& z8 e7 P // time step. The action is executed at time 0 relative to
) t4 U7 k: ^/ O$ O& D" B! w" h // the beginning of the loop.' h& K4 T* ~) Z6 I, j' a; v
/ n* @; h, m7 S7 c( Q3 x2 e: v( m# q, K // This is a simple schedule, with only one action that is
( J+ z+ E& `% r // just repeated every time. See jmousetrap for more
7 P6 K( V8 V- x; R* G. F2 u, _ // complicated schedules.& W& W( ^; }4 O6 G% F$ _& L7 }
8 A: {9 C( y4 N# ^' E4 l p modelSchedule = new ScheduleImpl (getZone (), 1);6 j0 {6 [: T* D0 ]( e/ s6 T
modelSchedule.at$createAction (0, modelActions);4 y# [ z" e* I5 N; ~1 l5 V& Y
F0 ^* l( e2 ?! s: g4 R6 O5 }/ f
return this;
6 s* o& @( {3 {( c } |