HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- V8 B8 g( Y' J$ A6 }' p$ j( r/ D+ F& O) M, O7 @% N. u
public Object buildActions () {
5 `$ W5 I9 A4 D super.buildActions();
/ c* o$ c' b( K4 Z& ?
/ m3 I, j0 q; g0 b% ~6 v8 n' z // Create the list of simulation actions. We put these in1 F* T( K& H Q6 i
// an action group, because we want these actions to be4 @# w" S% |& k; c$ K( y8 `
// executed in a specific order, but these steps should3 C6 c+ b$ @1 S v
// take no (simulated) time. The M(foo) means "The message
# |4 Q t6 W; b/ D3 S j // called <foo>". You can send a message To a particular
; a! \5 S) j) A6 h( f: l* j // object, or ForEach object in a collection.
! O$ a3 X% m" a0 \5 W7 B; ^' G; X
% S) N1 L9 K' w6 a% i3 a // Note we update the heatspace in two phases: first run
. B/ }* T/ J' z // diffusion, then run "updateWorld" to actually enact the G, E2 H L+ Y! R
// changes the heatbugs have made. The ordering here is
( o5 P; \ j/ ` a4 Z$ N. t7 D3 ? // significant!/ l8 N+ F* r- l
, c( y" R0 r8 X4 M4 i // Note also, that with the additional
8 p, x7 R) L$ N$ a7 k8 n% |3 y // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ h7 r/ I! a, C0 B" ?+ X // randomize the order in which the bugs actually run
( d* ~0 m/ g! t4 E // their step rule. This has the effect of removing any5 Q0 @) F( _# |/ }
// systematic bias in the iteration throught the heatbug6 Z' v9 E! W; P% j/ v3 U
// list from timestep to timestep
7 ?* m. E5 Y! q4 r& A. J
* Y; y2 ]4 |8 ^* |5 D0 s6 z# } // By default, all `createActionForEach' modelActions have! H) U% Q% C6 t s) _
// a default order of `Sequential', which means that the
8 o5 G# F; x+ |! E7 i! X // order of iteration through the `heatbugList' will be o8 @* j- T4 j; P, @! M
// identical (assuming the list order is not changed
* q( X2 U4 m5 x7 c* b! ^' e // indirectly by some other process).9 J3 Y& c& A- h9 k
1 O1 A* [, l5 G modelActions = new ActionGroupImpl (getZone ());3 W4 M' }, D' K( O: Y- X X
7 ?" `3 E/ X0 k, g( X. k
try {
. J1 F* k' b- \7 \- T0 a modelActions.createActionTo$message; h" u' O4 p& E% ?3 ^
(heat, new Selector (heat.getClass (), "stepRule", false));9 l; n: b' s) g. J: O3 V* X
} catch (Exception e) {* Q: z5 P" K: x* g
System.err.println ("Exception stepRule: " + e.getMessage ());! L; ?9 c# ]+ ~
} c+ y# N* h( W$ b( E- E; c- N. \9 ]
3 s. K7 _+ J) @: @
try {
% X! P- m! T; Z9 Q+ w- P Heatbug proto = (Heatbug) heatbugList.get (0);* u! I0 H7 j, t/ p- l
Selector sel = - T1 Q0 s* j2 M
new Selector (proto.getClass (), "heatbugStep", false);
6 \: e4 j2 B7 r6 e% l2 R4 ^$ C9 v actionForEach =% i/ b: K) }% D x
modelActions.createFActionForEachHomogeneous$call1 @6 B1 \7 `$ \$ i4 R0 F
(heatbugList,
/ @0 L( |) |; _8 a& F) e# r new FCallImpl (this, proto, sel,
" t4 S* `2 I( \. Y" g0 B new FArgumentsImpl (this, sel)));' A- m& G' _" `- o
} catch (Exception e) {3 U5 H8 Q [ n M! O
e.printStackTrace (System.err);
; K ^: j) }; I( [" _& } }
+ r: B- |2 f8 N
9 k2 ]7 w2 [" z" w: m syncUpdateOrder ();
) N0 K) _0 q) A+ e$ J: N' Q* \3 |
try {
' o* C& R2 K+ T modelActions.createActionTo$message 4 j+ C0 ^+ K; v& P
(heat, new Selector (heat.getClass (), "updateLattice", false));
* ~( @4 F- ?6 ~1 K7 O& v } catch (Exception e) {4 r- t' z7 E h! u$ G: b3 k
System.err.println("Exception updateLattice: " + e.getMessage ());5 `; o$ r0 f7 u( o
}/ G) [9 g; w( E) w! V; B
1 q f/ W; E+ N) w! F+ x Y4 \
// Then we create a schedule that executes the
( H* F: y+ T# V/ D // modelActions. modelActions is an ActionGroup, by itself it
5 U' w! t% c3 t. {# e- z. M // has no notion of time. In order to have it executed in
5 V" \5 H9 X( o0 h$ ~# b8 R; p // time, we create a Schedule that says to use the. B6 h$ N" F! v3 F4 y- v
// modelActions ActionGroup at particular times. This
- j! S$ u. z! |) [: a+ _8 o // schedule has a repeat interval of 1, it will loop every
6 \3 y" N) l4 k+ j8 G( N4 K // time step. The action is executed at time 0 relative to
1 k" E; {8 p/ o- | // the beginning of the loop.
x; B- `4 v& h) [' G! o
) C0 Y4 z6 M8 s$ R% w4 O. F // This is a simple schedule, with only one action that is
0 u: W) ^; ^1 R- s8 b // just repeated every time. See jmousetrap for more# n) O* X" N6 O1 r
// complicated schedules.
# [9 D1 h3 p1 [ : y3 {2 i b2 X1 E# A' q
modelSchedule = new ScheduleImpl (getZone (), 1);
8 V4 K' {8 P. ]3 Y* {, }) c5 c modelSchedule.at$createAction (0, modelActions);
/ f% z3 d" x# P' v0 m D" K( U/ N* S
! E/ I' h7 V* n# y5 Z2 [! F1 M0 C: h return this;& ?' ^, u7 U, k3 W' I) P
} |