HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: {; j4 W# p7 O
) Q7 v- ^5 g: N: ]
public Object buildActions () {
6 H9 T$ N0 J7 Z super.buildActions();
* f5 j5 M& D0 R- P C& x7 o 9 e" [5 Z5 ^% j; b' Y! t
// Create the list of simulation actions. We put these in
3 n4 h* O+ f3 @' D6 z // an action group, because we want these actions to be
. p9 O) W- E! S // executed in a specific order, but these steps should
$ E1 G" |/ R* G7 k9 f // take no (simulated) time. The M(foo) means "The message+ L P# U' I) e# e0 N3 k
// called <foo>". You can send a message To a particular% }+ b8 x3 r1 m8 t- m/ l
// object, or ForEach object in a collection.- ^: x3 e* G5 o1 O) K6 ]
/ ^* O1 Q. P0 @
// Note we update the heatspace in two phases: first run
! J3 z% m) ^5 d2 N1 u3 h* C // diffusion, then run "updateWorld" to actually enact the1 O9 u6 {/ U) O1 G; L. V9 @. S
// changes the heatbugs have made. The ordering here is
, `4 l" @, H; d# p // significant!1 O: j/ [) ~+ I5 C3 q9 ~: a0 J# A
- W; ~2 n* v/ v, ^. m9 R // Note also, that with the additional$ z6 N$ J/ ^) L
// `randomizeHeatbugUpdateOrder' Boolean flag we can; O8 f; ?& z1 S! ^, V, l
// randomize the order in which the bugs actually run
R8 I! {, b7 r0 x, }9 l+ f( l3 c% | // their step rule. This has the effect of removing any
+ n% s- G1 ^* U) \ // systematic bias in the iteration throught the heatbug6 A- v+ K1 V( r5 [. X
// list from timestep to timestep" e0 T; ^6 _# Q5 P( H
' b+ v% p, B( F' L
// By default, all `createActionForEach' modelActions have
; r& E1 Z" Z1 ?$ } A$ z // a default order of `Sequential', which means that the
" q& j7 b' o/ _+ h // order of iteration through the `heatbugList' will be$ L/ W8 ?+ S5 t+ C: Y5 i1 X( n
// identical (assuming the list order is not changed
. N/ S5 t: a( u, j9 Q. \- G5 }- D // indirectly by some other process).
+ N$ \7 v4 V' g5 N1 _0 @ . M9 c$ z5 v8 I( N! v9 D* I/ X, ~5 X
modelActions = new ActionGroupImpl (getZone ());
- n6 F9 C" A2 q
2 [8 m2 Y+ V+ n try {
3 I- Y4 ^- l: l5 J4 a' x3 ]0 s modelActions.createActionTo$message
, E3 h# R( G! B (heat, new Selector (heat.getClass (), "stepRule", false));
: M G k4 s* O2 W2 p! `5 g- J; l } catch (Exception e) {4 L$ u( u+ g8 X6 }7 I; {7 |
System.err.println ("Exception stepRule: " + e.getMessage ());, i4 @' c! Z9 W! O( c
}
- |+ Y L- K2 ?4 n6 L8 t* p, i4 L7 T" Q
try {
) y, ?0 L% B2 @. O3 M) [* a Heatbug proto = (Heatbug) heatbugList.get (0);, I8 }" u% h- U1 g P. T. ]1 p" Q
Selector sel = " A& J7 ~0 ? Q
new Selector (proto.getClass (), "heatbugStep", false);
, S( {, U* X' |8 q actionForEach =8 V; u9 w* ~ y5 m# _" p8 z" W, m( T
modelActions.createFActionForEachHomogeneous$call
- ~+ x C' K I6 F: i" z# ? (heatbugList,5 H8 y, V8 g( k' l! o9 F/ r% l) [
new FCallImpl (this, proto, sel,( B8 f, e+ Q1 V; K
new FArgumentsImpl (this, sel)));
5 \) G' m! Q5 U } catch (Exception e) {; r* u& p" C3 J' _! ]) L1 o
e.printStackTrace (System.err);
" Y: C7 m' Z4 |& d8 H, k5 y }
7 V3 M( K- Y7 D u9 l8 J7 w* c " P- B6 _% U! G, q4 R3 Y0 Z
syncUpdateOrder ();1 F' G3 @, z$ G' R9 ~- a
8 ~. m' S2 \9 I- f0 @
try {
3 z+ ]" @. C( [5 a modelActions.createActionTo$message
" K: |7 K/ y) t; i( P1 n- g" k8 z (heat, new Selector (heat.getClass (), "updateLattice", false));
; }+ K6 S' t, {9 P } catch (Exception e) {+ J* r' U2 X& l& k3 }$ K
System.err.println("Exception updateLattice: " + e.getMessage ());
* o) W& c. [; d' [9 T9 T% N* _ }
4 `' Z: k. D) |' k. ]7 r ( x' ~4 v" P3 D: s; u. ?
// Then we create a schedule that executes the. T S$ ]- K% e4 z f+ P9 L8 Y
// modelActions. modelActions is an ActionGroup, by itself it1 T3 J8 Z, R5 Y* K: n* |+ }: b6 V
// has no notion of time. In order to have it executed in9 w8 E7 q9 I- V9 E" D( e5 r1 W: r
// time, we create a Schedule that says to use the
# q8 T% w) S( b; a9 ]$ _ // modelActions ActionGroup at particular times. This
. r( ` m" J' w- N // schedule has a repeat interval of 1, it will loop every
3 e1 u n7 M. A // time step. The action is executed at time 0 relative to
( _" D; D6 h) L. }/ ]3 ]$ N // the beginning of the loop.1 I# y& R% _& H! x0 }7 t. @
6 g. P* i* i( q
// This is a simple schedule, with only one action that is4 s7 j) A5 n" ]! ^# Q
// just repeated every time. See jmousetrap for more% B( r1 d( O! K4 e; X) Q7 A# }! ~
// complicated schedules.% B; L1 X& ^$ ]% ?# v5 w1 P- X
' {- y# V* o1 \& P modelSchedule = new ScheduleImpl (getZone (), 1);! C* Q0 q9 A1 `: k
modelSchedule.at$createAction (0, modelActions);
/ k0 U- Y& f0 t1 d
" ^+ {9 ]6 }! X! E return this;
0 M+ j$ J# n% U. x } |