HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ i7 i( K# H! H4 o$ D8 U7 _
2 z! q" b! A9 \ public Object buildActions () {2 p5 u% m( ^7 N% [5 T
super.buildActions(); E0 ]. |1 Y! x0 h# ?
7 l0 q( D/ B g7 F7 W1 v7 F
// Create the list of simulation actions. We put these in1 g6 |4 ?% w' n# ?4 D
// an action group, because we want these actions to be
* P/ r- l" o5 g: ]0 U: x // executed in a specific order, but these steps should$ H6 O6 n. Q" U1 W; b5 N$ x4 ]% t' n
// take no (simulated) time. The M(foo) means "The message9 I+ {) C% m, b4 T8 A6 V
// called <foo>". You can send a message To a particular* @ U5 v2 q+ T
// object, or ForEach object in a collection.* a7 f* }8 J6 Y6 L
4 b, P2 r0 b/ `* V+ x( M' s9 v" c1 X
// Note we update the heatspace in two phases: first run* l, E5 B. b7 r' a7 e* ], W- B* e
// diffusion, then run "updateWorld" to actually enact the
) r* G( y5 r: [+ y, z // changes the heatbugs have made. The ordering here is
( X/ n F: j! o6 d; K( x+ L& r // significant!
7 q9 q1 w, d- X/ Y! P" |" f' O
( w% t4 {* o# ^3 D5 }' i& j+ t // Note also, that with the additional
4 y! \" ?/ Q6 ]6 T% r* g# ~# H // `randomizeHeatbugUpdateOrder' Boolean flag we can1 u& _; E% f( x$ M# W
// randomize the order in which the bugs actually run- L2 Z; X( v$ i5 L5 x7 b& o3 J! o
// their step rule. This has the effect of removing any8 F5 ]: h, Q3 }& E, i( j
// systematic bias in the iteration throught the heatbug
, s. {" }9 r" {+ s) K# J( k- P! ^ // list from timestep to timestep
0 ]2 B, d& G+ n7 j3 h( } 6 A* Q H* b; S! R1 d
// By default, all `createActionForEach' modelActions have/ J' B- }6 P9 N. @
// a default order of `Sequential', which means that the
; u: f" A* J+ s. W5 c // order of iteration through the `heatbugList' will be
$ y( p0 h( r& l1 {7 |5 n% }: V // identical (assuming the list order is not changed
4 d% q* C! x- g2 s // indirectly by some other process).8 q; X, |7 ^3 b4 F; O& I. ?
. b: w& T) P9 x; X/ u% K# s! F7 E i6 B modelActions = new ActionGroupImpl (getZone ());
6 o6 z+ _. a3 X N6 M0 x0 R
; N% m b9 i' X' n! e( J2 S3 [ |1 d try {
$ O4 z/ h+ _7 f7 _& v modelActions.createActionTo$message3 c- \5 k$ U8 O: p: {
(heat, new Selector (heat.getClass (), "stepRule", false));
; k. A) x5 ] M# x; D6 b9 Z& v } catch (Exception e) {5 K$ L; n/ M# q; O4 f& J% W
System.err.println ("Exception stepRule: " + e.getMessage ());
7 v, x% i* ]2 Y& @ }; O7 |& y* I! ^. i4 K' |
! b* T7 N0 P2 t8 e try {9 y9 }/ l( r- a# J( l: _, n
Heatbug proto = (Heatbug) heatbugList.get (0);
5 M i6 K9 j) Y! G- R Selector sel = ; H" M3 Q( `8 X. O' A8 Z* s
new Selector (proto.getClass (), "heatbugStep", false);
7 r N2 w. ]! P2 K2 k K) d actionForEach =3 r. k. G( {5 o5 d; r9 P1 W- @8 o
modelActions.createFActionForEachHomogeneous$call: u; B; Z3 o1 N
(heatbugList,: Z! e" J% c* t p/ [) Z
new FCallImpl (this, proto, sel,
, R! F- w: o! D, Y; ` new FArgumentsImpl (this, sel)));: m; G& Q2 ^# N/ v2 {
} catch (Exception e) {5 m3 U' \2 K7 z s3 j7 i
e.printStackTrace (System.err);) S0 j) \" s- {0 `# w% A
}
! z: A# L; Z$ _" s* k: u' h
: h3 F- X, q% f9 X* W syncUpdateOrder ();
( E# H9 o6 |/ ?$ a$ j+ F, R$ }2 S' L! ?2 a* t }1 U( h D
try {
- ^; ?. _, ]$ B0 N: v modelActions.createActionTo$message
% e( R( D; R5 q7 J h! u8 D( s (heat, new Selector (heat.getClass (), "updateLattice", false));& F9 Q7 S: p6 F) X: t% z
} catch (Exception e) {/ v$ N1 c) k, s, U+ N
System.err.println("Exception updateLattice: " + e.getMessage ());
/ b' j+ G$ a# k: Q1 m4 w( U$ n }
" u8 f, I! N' Z9 _; Z$ \0 N # } x$ e7 s# a
// Then we create a schedule that executes the! t# _3 f% E1 s
// modelActions. modelActions is an ActionGroup, by itself it9 k1 H8 L! u! H! j3 S; V/ H
// has no notion of time. In order to have it executed in
A3 j4 @; R( L e // time, we create a Schedule that says to use the
* S q- O$ z' h2 k! [+ O // modelActions ActionGroup at particular times. This
" h2 ]0 A; z/ ^3 H // schedule has a repeat interval of 1, it will loop every0 v+ ^( E" U6 u/ ~8 Y, |% [- W/ B
// time step. The action is executed at time 0 relative to$ r! u, j* A, l3 d
// the beginning of the loop.
2 m. D( c0 w% ^3 N" L
8 r" N- D% r+ n* F) ^- B" u // This is a simple schedule, with only one action that is' u1 h+ {( B2 a1 w% J& I
// just repeated every time. See jmousetrap for more
% u$ h0 l1 V' `: S2 r" b // complicated schedules.. t5 j3 T+ ?! W/ u4 V' |0 w* z
1 [1 |, t* D. ~3 x/ g0 i% K
modelSchedule = new ScheduleImpl (getZone (), 1);2 x* h* W3 G9 p# ]/ t
modelSchedule.at$createAction (0, modelActions);
, r+ f5 A# O& ^% g3 _+ B , J+ r$ D4 j3 S# @* z$ n
return this;
" H) o2 V' h, k& |. ? } |