HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% m" R' ]: w4 {( k2 s% O- h3 T
- D! [) L! j0 | public Object buildActions () {5 U+ t3 q& N K2 k3 \
super.buildActions();9 D$ X- ? ?) B
" G8 w+ V4 w4 q8 ^ e
// Create the list of simulation actions. We put these in* C Y I# D: g! A) ~
// an action group, because we want these actions to be
3 @" m; s1 ? A7 P // executed in a specific order, but these steps should3 w6 V, X4 R& ^% M: |
// take no (simulated) time. The M(foo) means "The message' S$ B- \9 y/ q" `; @0 g
// called <foo>". You can send a message To a particular g8 a4 t* X0 V9 C/ t8 ]
// object, or ForEach object in a collection.9 }& \/ g: R0 l( i0 {5 \& I
6 l6 V( \; a7 F! R/ V
// Note we update the heatspace in two phases: first run+ l. r; ^7 {- `6 U# X; Z1 B
// diffusion, then run "updateWorld" to actually enact the
( C$ z4 B0 E& Z. ~- f9 V) v+ [$ n // changes the heatbugs have made. The ordering here is+ g9 N! k/ W, y( d* d
// significant!+ y! C, ~, E- _
% W/ U4 @2 Y6 X9 ^) H3 ? // Note also, that with the additional
* U% D4 V4 J$ Q. w1 h3 C" o. b // `randomizeHeatbugUpdateOrder' Boolean flag we can0 |& V" @; T/ F3 W1 O4 [; t9 }
// randomize the order in which the bugs actually run9 Z" ]! r3 B$ a5 @2 ^3 p& n; r
// their step rule. This has the effect of removing any
+ e }7 B8 V4 L) W4 G; {" `, D1 f // systematic bias in the iteration throught the heatbug8 q h E! U1 @$ \- O* u3 x
// list from timestep to timestep
( @5 e& N Z3 q% g8 m
' W: V9 Z( ~; n" i/ x // By default, all `createActionForEach' modelActions have" }8 k6 K5 d0 B& ~, n
// a default order of `Sequential', which means that the, r9 j, O$ }( y% |9 R
// order of iteration through the `heatbugList' will be
2 f0 w4 z4 l% t% j* c // identical (assuming the list order is not changed
2 L# _2 z3 g0 T // indirectly by some other process).
* J( t; [: Q( b, o, d5 H3 T
/ {* H; `. @) u2 p( A5 I modelActions = new ActionGroupImpl (getZone ());
+ @% I( N6 w: {" h3 I* T( c! C0 b6 ?( q2 M7 s; L$ a
try {! i/ o- t7 p% A9 s4 V1 w
modelActions.createActionTo$message7 f+ U/ l5 L% U s1 R
(heat, new Selector (heat.getClass (), "stepRule", false));1 R* A" P' O- S! r3 M
} catch (Exception e) {
- i8 D* g2 y5 |0 Q System.err.println ("Exception stepRule: " + e.getMessage ());( o6 _9 y. J" e5 S
}
% g5 i8 N6 t& V- ?( u7 W2 j( x) m3 N& p; `$ b( k
try {
) n4 V% `5 {& j Heatbug proto = (Heatbug) heatbugList.get (0);
' K+ s9 ]0 Q8 f/ H1 C Selector sel =
) r! S3 O9 {# k% U$ d1 G new Selector (proto.getClass (), "heatbugStep", false);
# N7 o: `8 v% {0 Q8 W; g# x actionForEach =
5 q- G" C. {7 c7 B4 A% M modelActions.createFActionForEachHomogeneous$call
; o& N/ W& I j5 d& B; | (heatbugList,4 F/ f$ }$ ], Q( y/ `
new FCallImpl (this, proto, sel,' m' w2 Y! \6 n" A6 n: b
new FArgumentsImpl (this, sel)));5 X. k W+ ]4 e+ a/ m0 J
} catch (Exception e) {* j0 m- I7 M3 k2 {2 D( ?
e.printStackTrace (System.err);$ u' G( j! l! k$ p9 [2 V
}- a- h: B$ S3 G8 O U
, H! P! x6 T4 G$ N syncUpdateOrder ();
+ \2 _/ e' W$ X
2 ?# Q- e) ?7 h try {# f6 ^2 G/ b+ e# P1 C( J$ Y
modelActions.createActionTo$message 6 @8 k- |% Y2 q3 n! y" r. Y
(heat, new Selector (heat.getClass (), "updateLattice", false));7 O9 G4 s/ A4 }7 f: b2 j
} catch (Exception e) {
( y* o) R( I! F5 N' g) j System.err.println("Exception updateLattice: " + e.getMessage ());
4 \1 H4 t8 q5 l, J/ d }
( J% ^1 l( t: U/ F; i" @ 6 P/ A# U" o9 g2 H7 w$ g( H. y( O
// Then we create a schedule that executes the
9 v6 [- v- {6 ~3 W% }- m // modelActions. modelActions is an ActionGroup, by itself it
+ ]) J5 ~) A) x- V9 ?% k# D" ?' a* {. V // has no notion of time. In order to have it executed in
6 p( R6 G/ h% L# y5 P, R/ A // time, we create a Schedule that says to use the0 t: S, ?1 _6 K- p7 f) i: o' ^
// modelActions ActionGroup at particular times. This% u. H9 n4 U& Z, N; ?
// schedule has a repeat interval of 1, it will loop every; x3 o) U, n" i8 n8 y
// time step. The action is executed at time 0 relative to
6 E' D' H$ [' v7 q% ? // the beginning of the loop.( V4 Y+ L; `4 ^- Q6 U. @
4 A' H5 y* U8 o+ ]* H( A$ u
// This is a simple schedule, with only one action that is; |" |. p$ g# I: w6 n
// just repeated every time. See jmousetrap for more( H3 s8 m* w+ ]5 F, J/ y1 X
// complicated schedules.3 h% r3 w* a% v
$ N( p9 ?% `0 V7 j2 E4 l1 ? modelSchedule = new ScheduleImpl (getZone (), 1);- F0 R2 C3 y1 G, M& s
modelSchedule.at$createAction (0, modelActions);
# n4 @+ ?" i2 L% ~/ g! I * s9 n/ G/ H* [4 k( q3 p
return this;% d) p1 Z4 D6 N
} |