HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& _& W& D; o; L* i4 Z9 k
- S7 t( v1 E4 S& a f" m0 o
public Object buildActions () {
3 H2 F# V6 U+ `3 n super.buildActions();
* @& K- e0 U- J3 a: @. @* o " u8 z, V1 f* C5 A4 E2 [* I" p3 E
// Create the list of simulation actions. We put these in
+ h- R1 }4 V/ N$ A& \, [9 J // an action group, because we want these actions to be
$ x @7 w" a8 e5 g# I2 X' z0 z" ~ // executed in a specific order, but these steps should
" }- Q3 J6 I4 u: O8 o# ?7 ]1 @ // take no (simulated) time. The M(foo) means "The message
8 d& t5 i0 r6 A4 H1 w7 W$ l# { // called <foo>". You can send a message To a particular l+ M' n# q9 S7 u- b+ l" m
// object, or ForEach object in a collection.7 Z9 [% [0 C* |: }8 I
$ `8 j0 }! h ~' g- `& R/ B // Note we update the heatspace in two phases: first run6 j# K A+ p6 h7 W7 I6 ?: N
// diffusion, then run "updateWorld" to actually enact the
* d1 {' ?3 C$ ]1 t/ O- L // changes the heatbugs have made. The ordering here is8 b, f1 g* X6 e0 y
// significant!2 s0 |1 q6 p( m+ O- u7 L
! P: Y8 x) J) f! s$ _) |, x
// Note also, that with the additional
' I$ [' R2 ^: f$ L* u0 [! _: P& V // `randomizeHeatbugUpdateOrder' Boolean flag we can+ y9 x4 M2 X' b" C0 n( W# V
// randomize the order in which the bugs actually run' w1 n: U2 q" b" m# V9 ^1 {5 t1 d: q
// their step rule. This has the effect of removing any
% M- R4 r# |+ [& L( F5 u7 G% E // systematic bias in the iteration throught the heatbug5 B0 K4 i6 q- ~, F" B
// list from timestep to timestep
7 B0 y1 k; l! [9 [1 l) X: } ) B+ b0 O$ R# j! r5 Z0 o1 H
// By default, all `createActionForEach' modelActions have. N7 ^8 f% w* N6 ^' ~
// a default order of `Sequential', which means that the7 c' m# K$ g( m" p8 W% @
// order of iteration through the `heatbugList' will be
- v V1 Z/ A1 V" h% N6 ~7 K9 s4 G // identical (assuming the list order is not changed# ^$ d9 q% y9 _( G8 C( {( s
// indirectly by some other process).4 Y% |/ N8 S, H2 T! M4 w
7 G0 |' [, S, S) M3 { Z modelActions = new ActionGroupImpl (getZone ());# I, r& L7 F1 J
7 `1 y- i+ Q6 O1 q0 @7 u
try {9 J2 G! L4 G& X
modelActions.createActionTo$message. m, s) _, a8 \) u% D7 q9 w
(heat, new Selector (heat.getClass (), "stepRule", false)); s* z$ [- k! y8 D% X
} catch (Exception e) {
; m. i+ m R( i. ~; Z; u+ L# | System.err.println ("Exception stepRule: " + e.getMessage ());% H: t! X# G# ~* n l& x
}
* v R* Y# g( e7 O3 n$ q1 B) L6 K( O+ J. h& q
try {* Y, F0 z. ]: c. A/ v/ g$ X
Heatbug proto = (Heatbug) heatbugList.get (0);0 a s6 H8 E* Q) s' Q; ]) E3 _
Selector sel = 9 m9 C7 t3 z, N4 }
new Selector (proto.getClass (), "heatbugStep", false);- G* U7 z! K' a: `8 |2 M( X
actionForEach =
6 [& e- f. b( g modelActions.createFActionForEachHomogeneous$call
! F, p) o* ?4 l* J (heatbugList,
y! S' v6 i: ~# s$ U new FCallImpl (this, proto, sel,# l6 L- q0 f% D; R0 ]( [4 w
new FArgumentsImpl (this, sel)));
S5 ]/ c' F, s' s9 p4 O; H) O6 b } catch (Exception e) {* T# ^ o# K4 k. k& S9 W- \" Y
e.printStackTrace (System.err);
5 B! h0 Z7 Q1 O) n7 l }7 u7 \" x8 i9 T
4 ~( u; f4 V. w$ f7 \6 G! u syncUpdateOrder ();
8 {! T( _$ X" R) E
, T# X0 c: K# ]+ y. z7 D1 O try {
) j( f6 o- ^* F" o modelActions.createActionTo$message " ]0 z- D4 g* {
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 m, L& h! `9 @% K% S1 V- P4 F } catch (Exception e) {. s- e0 u( |) C q1 h
System.err.println("Exception updateLattice: " + e.getMessage ());
7 a5 V: P0 a9 s8 N; ^8 l }# a8 m4 X2 `1 \2 `: v' {
2 z0 g" u/ O& f0 I1 H
// Then we create a schedule that executes the
# b' N" u! j! ^* @( {, i. r // modelActions. modelActions is an ActionGroup, by itself it6 `" p9 j2 X/ Y! a0 J
// has no notion of time. In order to have it executed in9 y* y% Y" q0 C$ D
// time, we create a Schedule that says to use the
6 k' l6 y3 T3 \, i) m // modelActions ActionGroup at particular times. This
' W" W+ S o! p6 C. B/ [' j- y0 t // schedule has a repeat interval of 1, it will loop every
9 x$ k- Y* v. v+ b // time step. The action is executed at time 0 relative to8 _8 {; C* `/ O. J
// the beginning of the loop.3 T. F. @( } h) x) u
8 K" ^* V& t, H7 j8 g4 Q) Z8 h // This is a simple schedule, with only one action that is
: X+ t, |/ r4 d& D$ I // just repeated every time. See jmousetrap for more
5 t: m$ ~ u2 S2 h. R; K- k0 }+ y // complicated schedules.
3 E$ C& g8 `! m ~& k; ]
% T% f+ Z- ~1 T; Q. x modelSchedule = new ScheduleImpl (getZone (), 1);/ G* }* F+ N$ w# U
modelSchedule.at$createAction (0, modelActions);+ _ E {2 h& q2 q" x
0 B' H$ E9 d& [
return this;) u v9 l5 P& k; L
} |