HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* ~ O! C& F' j; [1 y
) v. g D, \7 t public Object buildActions () {3 q% J O& k8 V4 \ @2 K6 y
super.buildActions();
- Z; ~- K, l3 I! L" o- s $ Q( b/ U5 u7 z3 Z5 e8 a' L* s
// Create the list of simulation actions. We put these in5 o. P% t5 \) N6 R. v$ S
// an action group, because we want these actions to be
' P. S, {0 p; Q( N2 q: M6 m // executed in a specific order, but these steps should! `. g2 ?) w8 C8 Y- i$ C y
// take no (simulated) time. The M(foo) means "The message' O6 f; w' t% i" I3 l, E- L: M
// called <foo>". You can send a message To a particular$ B- T. V, d+ ]. n) D. R
// object, or ForEach object in a collection.( v" k. c0 P' [( V3 k. F5 \
; G" O/ w2 G; h0 Z( o+ ~" l* @& C
// Note we update the heatspace in two phases: first run
( F2 M" e' `# p/ {& f // diffusion, then run "updateWorld" to actually enact the' G1 c. A8 Z- b+ R) i4 N
// changes the heatbugs have made. The ordering here is/ w7 B- D& i" a6 \& u
// significant!
9 h9 j& B( m$ M
2 w. u! v% x( y, Y" q9 C" m# s7 j // Note also, that with the additional( N5 Y- S& m4 n; Z1 T1 T/ Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 \* u' Z" I1 ~& V( Q
// randomize the order in which the bugs actually run( {8 ~2 c* a" F! u
// their step rule. This has the effect of removing any Z( U! l: l8 }3 H
// systematic bias in the iteration throught the heatbug/ k' I/ w, x( T1 y
// list from timestep to timestep
) h$ f q- v- {
9 O/ E0 o6 s H5 b# ` // By default, all `createActionForEach' modelActions have& J! k1 {9 k3 L6 K8 D
// a default order of `Sequential', which means that the
/ g9 x7 e$ Y6 R7 }! J // order of iteration through the `heatbugList' will be
' H! U; d# B1 Q5 a // identical (assuming the list order is not changed% I8 L. T( z8 J8 r! [2 x4 z' C/ E
// indirectly by some other process).' ~! G3 C" V9 h% K: x6 S! ~3 {
% V3 { x5 D. a9 b }& g
modelActions = new ActionGroupImpl (getZone ());4 \5 u3 Y# W' E7 T: o$ y
' _: u" b9 S1 Q( f try {
$ L4 ^) P0 n# u( e modelActions.createActionTo$message
3 L! ^2 J+ v7 D |4 f (heat, new Selector (heat.getClass (), "stepRule", false));
q e( J) Z0 M3 }! z } catch (Exception e) {
4 _7 n0 P+ W5 ]+ c System.err.println ("Exception stepRule: " + e.getMessage ());' ~8 B& W" \& H3 ^
}" ? \; b9 Z' X( a7 E
" f( V$ z/ J6 B try {
3 Q) g! v6 s0 }4 K( k" } Heatbug proto = (Heatbug) heatbugList.get (0);
& [9 k. x9 _' ~9 ^, Q% j1 E Selector sel = $ S- S: B8 ~4 V/ h* P4 V+ V. `
new Selector (proto.getClass (), "heatbugStep", false);/ X& M. D6 i7 m
actionForEach =
5 |3 n0 s, a' H& ]( V- ? modelActions.createFActionForEachHomogeneous$call, O# n0 v( N% M1 t k! z
(heatbugList,7 d0 P* O$ A& j8 U2 C
new FCallImpl (this, proto, sel,
0 k. O; L" @! F; T. Y new FArgumentsImpl (this, sel)));$ B- `3 P; { |) O$ Y8 \0 @
} catch (Exception e) {. I- l9 O$ Q4 M; g- }, \; e9 L
e.printStackTrace (System.err);
/ n4 a; O+ L1 ?0 u }% T8 J" c3 X Z* P
& n6 {' a0 a2 o( `1 b
syncUpdateOrder ();
7 }8 ]: [8 z+ n P6 ?0 M
( `9 o: L( s* v- x/ } try {7 N' s k9 e' h
modelActions.createActionTo$message
! a8 A; [$ P6 D2 O& v% F; j: u% F (heat, new Selector (heat.getClass (), "updateLattice", false));
7 [" P- {! K( d6 q% c# I } catch (Exception e) {
6 k+ L* \) S8 ? ]' Q System.err.println("Exception updateLattice: " + e.getMessage ());% l$ H+ P+ q* C/ h- p/ I* r) y0 h) a
}
% M+ r2 \! s0 W3 ]. M, [ . t4 z5 R* m" f8 o' i, i
// Then we create a schedule that executes the1 a2 J$ p c* J- M) j
// modelActions. modelActions is an ActionGroup, by itself it
, ?1 Q& C- j& l& I9 s* R // has no notion of time. In order to have it executed in* f1 n5 ~( E# Z2 z; W
// time, we create a Schedule that says to use the
# b& H, n( x8 Q$ Y7 T% a z // modelActions ActionGroup at particular times. This
, v, K9 E& y8 W# u( C+ ] // schedule has a repeat interval of 1, it will loop every
, U8 Y4 r, x5 V5 W9 m // time step. The action is executed at time 0 relative to* d7 _6 E6 B& y" d& e) I
// the beginning of the loop.% R. W, T/ O6 Z& x
; P2 n, U. ?/ S* C% i* D: i* Q // This is a simple schedule, with only one action that is
/ w4 Q5 R( Y# K# ?5 p7 [ // just repeated every time. See jmousetrap for more
9 d( o8 }: U% Z' H' y // complicated schedules.
% l% ~0 t1 _ j, Z3 h ' j$ h, P! ]5 O z0 s
modelSchedule = new ScheduleImpl (getZone (), 1);
. n0 }; q1 P0 w modelSchedule.at$createAction (0, modelActions);
6 [( x% `1 |8 A) ^ n3 R3 y4 a , G9 G( P: m; y
return this;5 Y/ [# v5 ^, r( W
} |