HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 G' ~0 O8 q- h" z. ]& z; }, f5 C: B) k
public Object buildActions () {
2 l7 |5 _5 b! m0 x super.buildActions();/ f! I( v; H5 R: y$ l; \ h- b
/ S" o2 w8 c5 I
// Create the list of simulation actions. We put these in
! h! g0 Y; [) x' x( R7 k // an action group, because we want these actions to be$ o6 Q/ m, s* _2 @
// executed in a specific order, but these steps should
$ ~! b2 K. @4 V // take no (simulated) time. The M(foo) means "The message' c7 O5 }$ K4 K; z: x6 L6 p4 L2 n( L
// called <foo>". You can send a message To a particular
) n% O2 G# t& u# W* k6 n% [: C // object, or ForEach object in a collection.
* R* k+ W+ f( T: n U: C3 h" s4 d+ G
// Note we update the heatspace in two phases: first run# Y" ^; i/ X( Y" M
// diffusion, then run "updateWorld" to actually enact the7 W1 E1 {! x0 L- b5 x* C# A% i# b; `
// changes the heatbugs have made. The ordering here is: g+ O: S* i5 ]/ s7 A
// significant!( c$ z7 m( `; C) w
& ^) a, z' Q. }, x' N, j: [ // Note also, that with the additional
2 s6 ]4 e, [2 G // `randomizeHeatbugUpdateOrder' Boolean flag we can6 {* `2 f& T0 s( A4 p5 X$ o- |
// randomize the order in which the bugs actually run. S& R" l5 h2 Q) F6 c
// their step rule. This has the effect of removing any
4 h* A: J* R9 Y$ R1 E // systematic bias in the iteration throught the heatbug$ h% a8 u/ P. j6 _& b
// list from timestep to timestep
- @5 Z: N* ?, h
9 q0 D% ]' p- F% ^ // By default, all `createActionForEach' modelActions have) n# {7 a, v2 Y- Q* D/ C9 z. L
// a default order of `Sequential', which means that the% O; T' \' m0 H' Y s5 A' l
// order of iteration through the `heatbugList' will be% @7 V( z2 R2 p
// identical (assuming the list order is not changed" w0 x% X. Y0 N( t, Q
// indirectly by some other process).
# b& X1 p$ [0 p0 @$ ^1 ~' T
0 K# r B+ v1 i2 Y) N' _, _ modelActions = new ActionGroupImpl (getZone ());
8 f8 D- G* E+ h2 j$ R) ]% N( Y5 t5 P/ b* E; y4 V9 g" e# I8 ?
try {, p/ v$ @( P: x# g' U
modelActions.createActionTo$message# n$ h3 Y! A7 C" H1 Q5 W, e% ~
(heat, new Selector (heat.getClass (), "stepRule", false));4 h' p# v' l8 g! _$ [' n' N9 u, w/ D
} catch (Exception e) {' k% u& ]7 q( W/ ^
System.err.println ("Exception stepRule: " + e.getMessage ());
, V' {2 d* w( A+ N }
4 n2 X5 D& V6 N/ a6 ~
: m, f8 o0 d' r, k$ U7 e try {
! X/ j% x2 {# ?3 s% X& I Heatbug proto = (Heatbug) heatbugList.get (0);' ~3 O8 N$ r" v4 l y
Selector sel = : S' O8 q6 r, p+ N T8 ~
new Selector (proto.getClass (), "heatbugStep", false);
8 E7 e) l7 u& t3 @ actionForEach =
2 p2 Y$ ?' e8 y% d& x modelActions.createFActionForEachHomogeneous$call8 C! e- I0 {" V( ?% Z* @
(heatbugList,0 o9 l! Z4 L! J2 G" U1 s, ]0 H7 p0 ^
new FCallImpl (this, proto, sel,
$ U$ b7 C# A5 Z7 y new FArgumentsImpl (this, sel)));5 @/ L/ s/ W' d% d; X5 F
} catch (Exception e) {) e/ N" ~" Q1 `& T8 C
e.printStackTrace (System.err);
; J3 ^+ P& B, [ E }8 z4 e, T; m3 g: N" [$ }
' P: O4 q! y- Z3 m
syncUpdateOrder ();
- {* D* i0 g% _ R; m3 L! ~- ^' c& n! j) v
try {# ?6 _) l% v- a4 Y5 }$ f) s5 H! r
modelActions.createActionTo$message
5 @. y# w. x2 \* ^. k (heat, new Selector (heat.getClass (), "updateLattice", false));
6 s- w# r' G2 m8 J } catch (Exception e) {$ A& W8 ?2 u" I
System.err.println("Exception updateLattice: " + e.getMessage ());
( C; t4 |& V- o' H }! v8 l% x- y; z! \
! n+ j% N5 B3 e* ]4 }! s* ? // Then we create a schedule that executes the, e, N0 Q+ | d! Q' ?
// modelActions. modelActions is an ActionGroup, by itself it
2 ^7 l- C% a6 D7 ~% \ // has no notion of time. In order to have it executed in
$ e# v% m# S& H5 q3 D5 e // time, we create a Schedule that says to use the
1 t+ p) ~9 p9 t+ _5 Y ? // modelActions ActionGroup at particular times. This
. A1 A7 ]# L" S* M! h; K // schedule has a repeat interval of 1, it will loop every+ r2 {4 y, J* h8 n2 k# c" \; D
// time step. The action is executed at time 0 relative to
! `5 h- x8 p' T. Z* F+ v( J/ Q0 c // the beginning of the loop.
+ n6 ?8 F5 I, B6 \
2 |8 j' ~5 n% E* _! X& C, ~6 n1 j // This is a simple schedule, with only one action that is) c R8 o8 c& t4 t) D0 g2 M
// just repeated every time. See jmousetrap for more
+ }: L" F9 D2 \' {7 Q // complicated schedules.. [9 t+ h n9 f( y) P
% u. [/ w2 m9 J modelSchedule = new ScheduleImpl (getZone (), 1);
8 ^# t1 X- K* Y2 E modelSchedule.at$createAction (0, modelActions);! M) L: ~$ `' O; S
) Q, d0 ]) n6 z+ ^
return this;
5 {* y L, y0 @5 V8 o } |