HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# a) k4 x. ^) T% I; }
7 O8 S1 O9 |7 x4 A' k( d3 y$ o8 ?6 ] public Object buildActions () {
8 ?3 d7 y4 i9 w, i- e super.buildActions();
' @+ {: C4 Z0 P- p
7 c k( ~. X' q0 C F // Create the list of simulation actions. We put these in. W/ O/ K4 M m _
// an action group, because we want these actions to be
. ]9 @. w( A% j // executed in a specific order, but these steps should
* p( a; B# L# q2 P, f' ~5 w' s/ T% J // take no (simulated) time. The M(foo) means "The message1 j- J6 Z, C0 _" d
// called <foo>". You can send a message To a particular# v$ }) {- C i9 M% d
// object, or ForEach object in a collection.2 ]6 D7 ~- A N1 c/ a& o1 {/ }5 a/ V
& @9 H, s" d/ i5 R4 I$ i // Note we update the heatspace in two phases: first run8 Y% p' j& K! b/ i5 W$ X
// diffusion, then run "updateWorld" to actually enact the
" m9 [. i/ S0 m. Z ]0 ^/ r // changes the heatbugs have made. The ordering here is! c x* ]7 @3 F# I( d$ @! ^
// significant!
: e; z5 E! W2 O& _8 c1 e . I5 n# D; G- i0 s/ S: w
// Note also, that with the additional) [4 p& J9 l4 G2 h6 F# Y1 y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 Q& f) q v3 g1 }1 C' \+ H' ?% Z // randomize the order in which the bugs actually run
; T0 J0 Z7 _7 \ V // their step rule. This has the effect of removing any
5 I" Q* D5 S5 F // systematic bias in the iteration throught the heatbug! Z- m7 F4 e( U; o- G9 {2 ?! ^ T1 a
// list from timestep to timestep1 ~+ r7 g, u- Q% l4 Y& p# y) _1 @
2 E1 Z) R. n& c6 i9 k1 u2 v2 d
// By default, all `createActionForEach' modelActions have
, D- c; [4 I/ J* i; H // a default order of `Sequential', which means that the
. S. k; v [) d. W0 L // order of iteration through the `heatbugList' will be9 g( W* ?. e$ Y4 Y: [& k
// identical (assuming the list order is not changed" @5 f( g+ ^& A5 y8 r6 F1 `
// indirectly by some other process).
8 E+ ?4 S" M+ J5 O3 a# I& o& ]
/ G6 r, d6 N% |$ c+ ]$ N9 u$ W" { modelActions = new ActionGroupImpl (getZone ());" B/ V" Q2 f w8 H# @
0 [: E& z0 q) u: G4 I
try {
* _: y* i7 R- S" k) P" d) s" H modelActions.createActionTo$message, n2 X# O) ?, p7 ]9 i
(heat, new Selector (heat.getClass (), "stepRule", false));/ p* m8 T0 R! M3 y- o
} catch (Exception e) {
! {$ Q1 T2 R" G$ @ System.err.println ("Exception stepRule: " + e.getMessage ());
: S, v4 [7 l1 g4 G }
2 S; X" |5 _" W1 D/ e2 l; h* ~! A2 A
try {: u, R7 M1 \$ a' T5 G0 H
Heatbug proto = (Heatbug) heatbugList.get (0);
7 Z \; ], s" V0 L$ z( y Selector sel =
+ Q% \& [9 p8 n4 n6 x _( Z! Y new Selector (proto.getClass (), "heatbugStep", false);
- \( `% h: M4 C0 C actionForEach =
' z+ e! l4 c" X; ] modelActions.createFActionForEachHomogeneous$call
- |& C3 C0 u% a (heatbugList,0 i! x' Y/ n6 w' V
new FCallImpl (this, proto, sel,
* r5 ?) B4 o2 ~) G" n new FArgumentsImpl (this, sel)));- I) @% ^# u& f7 e* }0 s& n
} catch (Exception e) {
% P8 x5 `( L- Q$ A e.printStackTrace (System.err);
$ H( t; Y& J% e7 b& N6 X. _ }, H2 |6 F4 P$ N0 h; v8 ~2 O9 V2 W
( [, R. z' F& ]# {" O) i% t syncUpdateOrder ();
% Q! R7 k' I% D' c" f$ `3 g, q, ^/ c5 \4 @; j7 L! c* r
try {
. S, ?/ V& A8 Q modelActions.createActionTo$message
0 @- k& l6 E& V1 o e5 V (heat, new Selector (heat.getClass (), "updateLattice", false));
5 \8 S4 D8 e- a! `9 l1 n) m } catch (Exception e) {. L V7 e8 W5 F! u. M, I3 U; O
System.err.println("Exception updateLattice: " + e.getMessage ());
1 w5 W" ]; O2 W8 \4 N }
4 y8 _8 F% B; [5 y* h
: T/ k1 {5 w3 { H9 R0 y4 r- n7 k // Then we create a schedule that executes the
+ @2 a) J3 ~4 W' R/ m // modelActions. modelActions is an ActionGroup, by itself it
9 }- I2 `6 M4 T- E) l9 M# c+ o // has no notion of time. In order to have it executed in
3 [2 T! C/ F1 ~+ C1 ` // time, we create a Schedule that says to use the" j1 s% l8 \3 q+ i" q" C5 r
// modelActions ActionGroup at particular times. This. m$ n# }( s/ ~( |" g2 N; J
// schedule has a repeat interval of 1, it will loop every
/ Z' X! J) F; J$ P // time step. The action is executed at time 0 relative to$ d. M# n3 g5 l
// the beginning of the loop.- t4 S5 G9 e( e1 x( e5 [+ m
$ Z$ X: S8 o/ f5 q% d' q0 j& e7 Q
// This is a simple schedule, with only one action that is
7 {% {0 ? P& ~$ r7 B2 i // just repeated every time. See jmousetrap for more
' t3 T3 \% J: c8 S" Q3 k // complicated schedules.2 y; }" t8 v' f; ~2 K% S+ X( B
& \5 ~+ e7 d, B3 z modelSchedule = new ScheduleImpl (getZone (), 1);& S2 q/ S1 O6 T, j0 X) p) i
modelSchedule.at$createAction (0, modelActions);
6 Q( k1 l1 I! j, K; P % m2 L6 U' j" D/ M
return this;5 v/ z T6 H. \7 l2 P
} |