HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) O% Q& Q5 I* ] Z1 t& K' c( x0 Q' b6 @8 [
public Object buildActions () {
! }0 y" L/ @3 S# Y" l super.buildActions();
( |! m3 f/ z9 \2 j
$ C( s9 Y5 |2 f. a6 d. L // Create the list of simulation actions. We put these in
5 l7 A. j3 t' O8 i/ U2 r // an action group, because we want these actions to be# F8 f+ t6 J, U v
// executed in a specific order, but these steps should- H% G ~5 C0 v
// take no (simulated) time. The M(foo) means "The message
$ {' I. h3 [) w# K9 \4 B. E% x // called <foo>". You can send a message To a particular
. e& ^4 H' T* Y& J& {& N // object, or ForEach object in a collection.9 u' u: N+ n6 b7 T( `) H; s$ \) \) m: r
4 i* ~" }& ~& _
// Note we update the heatspace in two phases: first run) N9 l" K/ t* f; j
// diffusion, then run "updateWorld" to actually enact the
: | c8 J! t) U. l# d; W3 ^ // changes the heatbugs have made. The ordering here is
4 ?6 ~/ E! C9 T // significant!5 O" ~8 x6 a4 D) o
! S0 l1 Z. V) P' p // Note also, that with the additional
" x, u! O; {2 z5 @: g, D- D7 b // `randomizeHeatbugUpdateOrder' Boolean flag we can
! i) z2 D* ?& ]+ q& ] // randomize the order in which the bugs actually run5 H7 L7 ]: C! z c: j$ V/ P
// their step rule. This has the effect of removing any( ]. X' j+ o* j8 b- v7 ^
// systematic bias in the iteration throught the heatbug4 J) y! h5 `' E1 e( [( ~* r5 s+ Q
// list from timestep to timestep
' B k/ e2 D* z3 Z ; j7 b* K+ P9 u4 j2 S+ q. R6 o
// By default, all `createActionForEach' modelActions have
8 [5 w4 ?& P9 ]2 y // a default order of `Sequential', which means that the7 B3 J, A6 D) w3 |, B) k+ ~6 u& i+ K
// order of iteration through the `heatbugList' will be! @! I7 `+ e% v
// identical (assuming the list order is not changed: ?- ]( D7 H. e ~
// indirectly by some other process).6 x% i& h$ |8 `6 a. k; f8 ^3 I- L9 C; g
. `' O: ~. q( X7 o modelActions = new ActionGroupImpl (getZone ());
( g' R5 N# R# Y3 |' Q& d. P4 L, T- t9 t6 q! ?4 M
try {
' ~' @* O6 e; U2 `: p+ i! d; N& Y modelActions.createActionTo$message( D/ C8 I! \$ c; V5 V" X, l
(heat, new Selector (heat.getClass (), "stepRule", false));: v( ~# J; |9 G, }) o, }% j
} catch (Exception e) {, N* Q% {: ^, E5 E
System.err.println ("Exception stepRule: " + e.getMessage ());4 b/ Z' U/ T+ ]2 [& r- F7 o
}
0 n, N' P+ `9 Y2 {% D: v5 s6 V4 D; ~6 Z+ ]; ?, J" F. M
try {
, x) p5 p! x% h7 ~0 @( ?1 u8 N Heatbug proto = (Heatbug) heatbugList.get (0);
9 x) b* P6 k( u Selector sel = , V% y$ r( U2 ^- m5 T
new Selector (proto.getClass (), "heatbugStep", false);, o- R n `/ e: _& X7 l
actionForEach =
1 z3 M5 N; e% J; ~- P! Q$ L modelActions.createFActionForEachHomogeneous$call7 ?& H5 R2 k7 h# b- }5 @
(heatbugList,/ [. t8 \, Z) r- V, X
new FCallImpl (this, proto, sel,* i% E* S+ @6 }4 ^, \/ [0 z1 c) Y
new FArgumentsImpl (this, sel)));0 W% g7 Y- L1 r. Z6 }1 | x5 L# K
} catch (Exception e) {
' L, J" _) h' ?1 O3 ~, c3 F9 K e.printStackTrace (System.err);
$ ?1 Y/ x$ {' y. ?* O9 C( e, {0 U }
; q: }% v( V* ]5 C # G# T& r4 o& J9 n0 F. q" |5 y
syncUpdateOrder ();3 y. |8 T! i6 @4 E
& Y% T9 ?$ I3 c( J+ r6 T try {
q. G1 ]8 S X1 S modelActions.createActionTo$message
& \2 Y% ]( y9 [2 L (heat, new Selector (heat.getClass (), "updateLattice", false));
- t7 s& n9 P% _1 G+ m } catch (Exception e) {
- L) ]' @9 W/ W( L. n6 X System.err.println("Exception updateLattice: " + e.getMessage ());1 Z [, A4 z8 ^: n/ ^* P" h
}
# y% e- `# Q; N8 e( F) K* f' J) V " z; k& D9 @* g( S/ w% m+ o
// Then we create a schedule that executes the
( c2 p& {% l$ u. {$ b! b& @ // modelActions. modelActions is an ActionGroup, by itself it
, W8 g- e3 L* Y" c; y! W; Y // has no notion of time. In order to have it executed in2 ^' J/ t: L% \" C' P, _: R
// time, we create a Schedule that says to use the) V* m! n$ f( X
// modelActions ActionGroup at particular times. This
6 g& F5 c. y5 C // schedule has a repeat interval of 1, it will loop every" z- Q4 d0 L8 g7 F$ n
// time step. The action is executed at time 0 relative to
; {8 _8 |8 r. _0 U9 ], K5 y9 F // the beginning of the loop.
9 V) d* u. G J$ Z8 d8 ~2 O) c. P/ B& T' O" ~( N* i$ u7 U
// This is a simple schedule, with only one action that is
* K9 z( Q1 O, x // just repeated every time. See jmousetrap for more3 ?( ]9 v, X! V* L0 y4 y2 d+ }. ~
// complicated schedules.7 V7 C: P/ g, {+ F% g
9 U. ~& w8 b5 n* P8 @8 K modelSchedule = new ScheduleImpl (getZone (), 1);0 {- t: |& {1 o+ j$ q% I* S# E
modelSchedule.at$createAction (0, modelActions);
) I0 G2 f% {" V. K2 C5 p2 `4 s . v$ u j3 @$ p: z- h$ ?7 Z
return this;
" L' Y0 G t# ]: p; S5 R: Z9 ~ } |