HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* M1 D/ L( p3 u6 G2 R2 z
+ j# Q, y- I' }8 ` v public Object buildActions () {
' ^! ]. W1 U8 {2 A8 a3 V. Q2 b super.buildActions();
5 W! n. Z4 y; F* v 0 d# C% D( y! B. T y+ m" e
// Create the list of simulation actions. We put these in% @( k: v7 g+ l8 b @, j) O
// an action group, because we want these actions to be
, a+ E$ G6 t) p: M // executed in a specific order, but these steps should
$ b7 U: t; V: q# ?- A: _" J // take no (simulated) time. The M(foo) means "The message6 s! q* h8 h" D1 z
// called <foo>". You can send a message To a particular# M) _2 C- ]9 x) o
// object, or ForEach object in a collection.
* j6 t% u7 k8 J2 K
1 B. B, M& o* c2 S0 k. D // Note we update the heatspace in two phases: first run
$ I8 \' u! J+ D3 @ // diffusion, then run "updateWorld" to actually enact the" `7 ^( c6 ^6 w. W9 {
// changes the heatbugs have made. The ordering here is4 E3 V9 n; A, L1 Q% Q9 U9 b
// significant!
. b' N" B- J# h7 z: y4 k( u + n% Y" ]7 a8 Q' V
// Note also, that with the additional
, i7 z! h. H+ y$ P, N; c9 H/ U // `randomizeHeatbugUpdateOrder' Boolean flag we can# h- C1 i. h% J& _- M
// randomize the order in which the bugs actually run
) G4 z F* {3 X; ^# K // their step rule. This has the effect of removing any9 M; `- T$ N! s
// systematic bias in the iteration throught the heatbug" _5 a, u8 n) ~- ^! J6 x
// list from timestep to timestep9 m1 r4 y F; v* M8 X
t6 j n2 v ]# p1 L // By default, all `createActionForEach' modelActions have
7 f6 ^6 A) j, l$ d# M* `" a // a default order of `Sequential', which means that the8 ?, Y9 B# I' W- _' Q: ^6 F- n
// order of iteration through the `heatbugList' will be. t, H# y6 W- s5 o1 L. q+ r
// identical (assuming the list order is not changed
$ I4 d+ \" a% C' f7 g // indirectly by some other process).
1 K$ k7 N9 _( l7 P/ d5 C 5 B3 b1 S$ X6 {% O" X
modelActions = new ActionGroupImpl (getZone ());8 n( K' g# k$ r1 n9 A- d. a
& `! t) l+ b7 Z/ M0 S: R try {
" T3 Q# t5 d+ V8 z' C( V% P modelActions.createActionTo$message! [* q& W" i X
(heat, new Selector (heat.getClass (), "stepRule", false));2 r& P/ I$ H, ~5 K2 G; ^1 J
} catch (Exception e) {
1 R5 b5 E# M0 }% \3 T! F System.err.println ("Exception stepRule: " + e.getMessage ());
0 P! u) M+ w9 b6 o$ _* z }3 `) }3 T6 y8 K* Z- F0 F
0 Q& Q. K5 C( {( p3 T
try {
0 z' J8 |5 N/ e7 F+ j Heatbug proto = (Heatbug) heatbugList.get (0);
$ u0 R6 T3 G' ]# ~4 Y1 K Selector sel = 7 m; N Q% e3 s, D* a
new Selector (proto.getClass (), "heatbugStep", false);
: V4 s( v- p7 N3 F4 } actionForEach =: ~' H; _3 x, w
modelActions.createFActionForEachHomogeneous$call7 o5 y% L* w5 ?7 K! a, E
(heatbugList,# O$ U5 Y7 I! N3 D! }
new FCallImpl (this, proto, sel, q- _5 M, S- c p, b0 i' R4 `
new FArgumentsImpl (this, sel)));
6 l) A7 m, E, ~# D" O# ? } catch (Exception e) {
( ]# U' S$ D7 W7 r e.printStackTrace (System.err);
, H2 x) u; M: |/ o }9 ]0 Y8 {; f8 A% S3 D, L
4 u6 Q% {2 t: D$ Z2 [ syncUpdateOrder ();
r* C d) g1 j; j/ ?# ~. D5 G
try {0 y0 p/ z. m3 `# n7 x
modelActions.createActionTo$message / n' `2 _) }$ O b$ i; d, v6 u4 T
(heat, new Selector (heat.getClass (), "updateLattice", false));$ W6 D* r6 R# M) D
} catch (Exception e) {
' Q" q* v( z: \/ N System.err.println("Exception updateLattice: " + e.getMessage ());" h8 U3 F9 r% p; N; k4 P7 A
}
% G3 H3 Q2 `& _; A0 R- U* H; S. X 5 ^* x- a0 K( c D e- P" J2 q% I4 M
// Then we create a schedule that executes the3 V6 t" i( C' W) P* l4 I) W
// modelActions. modelActions is an ActionGroup, by itself it
, U1 \5 s( B: ^ // has no notion of time. In order to have it executed in5 {- G/ j) _; _4 i) F* ]! b
// time, we create a Schedule that says to use the' m* I* Y1 Z z3 m) w
// modelActions ActionGroup at particular times. This
% f: L3 e9 T* ~2 X& W' p- |3 Z // schedule has a repeat interval of 1, it will loop every7 g: F$ q, ^, z4 l* f1 S' `
// time step. The action is executed at time 0 relative to, S7 D( v% f9 K. D2 e( Z0 K) T+ d
// the beginning of the loop.+ _# s+ `1 R1 e
* a# |( L' _* h
// This is a simple schedule, with only one action that is# k- C0 i8 ~) L! w4 t% L
// just repeated every time. See jmousetrap for more
/ g" [1 D8 @8 W. U2 A // complicated schedules.
/ Y# K, Q4 D# W. [% R { ( t1 {- M4 I' ?. s3 q4 ?- b
modelSchedule = new ScheduleImpl (getZone (), 1);
0 v$ N6 f* K7 {7 M: |1 }* G7 J modelSchedule.at$createAction (0, modelActions);
3 |8 @0 _! G9 x1 U( E6 E) d " W* y; a( t% E1 G r
return this;
! w6 r" n( G; L4 o- o/ P } |