HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! T+ f: N0 e" ?4 d- M! ?/ b- g* }
public Object buildActions () {
. [) H a8 f; w; `+ L7 V& t super.buildActions();
' t+ A8 m( b: e2 i& N5 h
4 n# Q5 p' r8 J$ K- U8 B5 S. { // Create the list of simulation actions. We put these in: p; N$ g0 Y o s% a3 N
// an action group, because we want these actions to be
* [1 N) ?1 X& R; w // executed in a specific order, but these steps should, C, V- s/ l0 V# c) r3 K
// take no (simulated) time. The M(foo) means "The message
3 q4 b" |' `' n- P // called <foo>". You can send a message To a particular7 v1 e$ j5 F9 K E
// object, or ForEach object in a collection.5 K+ s4 \/ S) ]7 [
0 e% S+ L& I) P$ m- p // Note we update the heatspace in two phases: first run
6 G5 L! e/ u) }) i* |% D! j // diffusion, then run "updateWorld" to actually enact the
8 u) Y7 _6 G: T a1 L) K // changes the heatbugs have made. The ordering here is
v0 Q7 v5 N- n; o4 r: v) f6 r // significant!0 C5 m9 w1 a4 @# q
/ n; y& u0 r+ N4 s5 W% F4 ~/ @
// Note also, that with the additional# P8 T0 _4 ]- z+ Q9 p( h
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 ]" U! K$ ~/ N1 p3 D# w; z // randomize the order in which the bugs actually run- \5 Z: g" e; S( E0 Y
// their step rule. This has the effect of removing any
: w4 }9 x, ~! r" E! z3 O7 X // systematic bias in the iteration throught the heatbug
: m; }2 {4 J$ K3 D. ]0 G // list from timestep to timestep
9 a- h0 i+ j( J5 u1 \. m" V
: o0 ~! v( ~" B3 J+ B // By default, all `createActionForEach' modelActions have. i9 w# o! ]) V( v6 X0 i
// a default order of `Sequential', which means that the' z8 C7 D% \/ C5 Y6 w0 ?! i6 o( {! o
// order of iteration through the `heatbugList' will be
' V) g) q$ L1 ?/ H // identical (assuming the list order is not changed5 @! g+ ?. Q" q1 d8 E+ f* Q
// indirectly by some other process).9 @3 S. \9 O% X" T$ _+ q
3 p* H2 e ?3 r
modelActions = new ActionGroupImpl (getZone ());
- V- j" w3 k, N; f' D/ i( M, S% Q/ g, D6 q" H
try {
4 H( ]: H8 J) R4 y' ^* Q, r8 L modelActions.createActionTo$message
6 ?" i2 N M5 C' o (heat, new Selector (heat.getClass (), "stepRule", false));9 H3 I- O4 K, D/ {4 I
} catch (Exception e) {. c5 \. G' N' ?6 Z: j
System.err.println ("Exception stepRule: " + e.getMessage ());, B; D& W' ]& ~% l: u! D4 g
}7 K U$ O- b. I$ |
8 }0 |0 X- }8 X# q# E5 k try {* k! X. k/ t0 _/ o
Heatbug proto = (Heatbug) heatbugList.get (0);
( m: H$ k1 {! _, L6 @' v8 O Selector sel = ) o; |. k6 P, g; W" P7 R! e) c
new Selector (proto.getClass (), "heatbugStep", false); j$ l: e3 v# R3 z
actionForEach =
9 g" E! O6 L4 W0 T6 X1 o5 F' z8 f modelActions.createFActionForEachHomogeneous$call
4 Q) Y5 q5 z% Q) O& v/ h (heatbugList,
1 k1 |; h9 h* l) G8 i$ h4 S new FCallImpl (this, proto, sel,$ M( ^0 D( V% Y2 a% f3 S
new FArgumentsImpl (this, sel)));2 L1 ]7 N o. R$ [ { g
} catch (Exception e) {
" Z8 _% j+ J7 E3 I e.printStackTrace (System.err);
) L, o) d3 Q4 S$ ~- |1 { }% U; j: D, H& _0 t
; I/ S' q! ]! N8 `8 `# g4 w$ H syncUpdateOrder ();' H* M" R0 |! l* ?/ S
5 y: t6 f% m0 e/ w; ~7 ~ try {
7 b K) T4 O/ C6 } modelActions.createActionTo$message
, v3 o. L# u m7 ^4 j2 u9 C (heat, new Selector (heat.getClass (), "updateLattice", false));7 P) F, X* ?: ~/ A8 D
} catch (Exception e) {% p" h, |- E* t2 R
System.err.println("Exception updateLattice: " + e.getMessage ());$ [) J* V$ u& E; C0 l4 S& L+ r
}0 c) T. a3 W7 K
! o6 ~1 k6 _* D' O1 _. q* D // Then we create a schedule that executes the
1 s7 K: ]8 R, U5 L; K& R7 v- }) [ // modelActions. modelActions is an ActionGroup, by itself it
9 n6 A z3 I6 W2 Z0 d0 l& \ // has no notion of time. In order to have it executed in
e1 {# a0 F( X! s; ], @# s- L! @9 i0 x // time, we create a Schedule that says to use the C' b3 p' W! k1 x$ }3 R
// modelActions ActionGroup at particular times. This( r o. k7 O( y9 l% u9 @
// schedule has a repeat interval of 1, it will loop every# I% j; _; [! E* N m0 a
// time step. The action is executed at time 0 relative to; A0 c$ |$ I& u) Z j; b/ p7 r' S) G
// the beginning of the loop.5 {; y& f" Y' Y
" f6 _7 Y" d) W# S // This is a simple schedule, with only one action that is1 s$ Z6 G2 y% H" Q( U, B
// just repeated every time. See jmousetrap for more& y2 f( }+ R6 ^$ w. V
// complicated schedules.
8 T. Y6 U2 X- U* s
4 Z. K# y6 O" E( B1 a/ m1 [ modelSchedule = new ScheduleImpl (getZone (), 1);
/ \2 K# G) B& |& i0 B& h% @: ~/ a; d modelSchedule.at$createAction (0, modelActions);
; S) i* L- \% c. F* j. W , L- `4 r7 Y" e7 ~3 c" u$ T
return this;, Y" z- x! Q" m0 v! M
} |