HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% k1 V, g& r& r( b, \7 k* `( h
9 H7 O: r" j$ i( {+ O public Object buildActions () {
; T9 Z1 k" x) d" v) j: ] super.buildActions();: M8 o$ q7 v. R2 w, S# u/ _
! M) A0 D, d0 G* k# y' F4 m
// Create the list of simulation actions. We put these in
( p5 R* p+ A' u/ M% ~ // an action group, because we want these actions to be
1 X! z8 e3 ~! l" l# L. S // executed in a specific order, but these steps should+ p* Z Z7 N0 t
// take no (simulated) time. The M(foo) means "The message
4 f: ` b# _0 n0 ~3 S) S% \" R // called <foo>". You can send a message To a particular8 R: m: q% f, R; O
// object, or ForEach object in a collection.
- F+ K, J/ `" ^3 Z
9 ?3 n: g$ J1 J) X4 x+ v" H: I // Note we update the heatspace in two phases: first run% |4 P# J& e, E3 G
// diffusion, then run "updateWorld" to actually enact the
' R P) Y! H: k3 f. u1 @) y. c // changes the heatbugs have made. The ordering here is) l8 G1 a6 |3 d( k/ s. w2 Q
// significant!
1 C+ ^! k* ?! ~ ! s8 ]* U1 P- m. W) g
// Note also, that with the additional
5 Q* D/ Y+ Q( H. T6 H2 e& z) ?( Y // `randomizeHeatbugUpdateOrder' Boolean flag we can
; r( H+ r D- f6 Z% K5 H // randomize the order in which the bugs actually run
4 [: y$ [ m' t // their step rule. This has the effect of removing any
, Q& q# k; U6 S) L9 \. N6 T // systematic bias in the iteration throught the heatbug
+ k. K- f% u Z9 K* I // list from timestep to timestep
. z5 S1 y6 x! ?" U( D' R
6 W7 N6 a0 F4 W3 Q5 O+ k% G // By default, all `createActionForEach' modelActions have/ z3 H+ b- g; `( c& w- ?- o
// a default order of `Sequential', which means that the
8 V! t; W9 {$ R ^ // order of iteration through the `heatbugList' will be* z& l- p% h1 n% S& z3 l% n) A3 J
// identical (assuming the list order is not changed
' x: i. a; }) | // indirectly by some other process).
2 }2 t! `" m6 Y6 V4 _5 U# U
- N% s4 Z c5 J- k. u$ e* f modelActions = new ActionGroupImpl (getZone ());9 i1 l; J4 f y/ t: E1 f; ^7 j
) B+ d- {" @2 V4 t. g7 z2 O
try {
4 `( k2 n \' ~# C modelActions.createActionTo$message
# k V' q H# S! ^( ^( s$ i0 K' D (heat, new Selector (heat.getClass (), "stepRule", false));3 U/ I* [5 c# X& T- n1 m% n
} catch (Exception e) {
4 D9 o, l' k1 q8 k1 n0 g# g1 g System.err.println ("Exception stepRule: " + e.getMessage ());+ R; V7 j6 N: f% {6 [6 F1 i6 N
}
, k8 b5 b% C8 G0 M7 y" z' q$ U, T, w9 S9 ^/ S
try {1 R) C! C/ J1 F2 N7 H0 E+ {
Heatbug proto = (Heatbug) heatbugList.get (0);
" r9 g, r" t8 c Selector sel =
, |3 _3 A+ r9 R( A Q% |. h+ f new Selector (proto.getClass (), "heatbugStep", false);
$ k7 R# T2 ~" M1 T' U actionForEach =
- {1 m* a# V! w! D6 D modelActions.createFActionForEachHomogeneous$call
, s/ u' x7 `0 x6 b (heatbugList,5 d# a4 C( P+ y8 `0 N) p1 S
new FCallImpl (this, proto, sel,
) x; k8 h1 A5 p5 ] new FArgumentsImpl (this, sel)));) a+ |$ m8 c& Y% S
} catch (Exception e) {5 z% G* a/ |- y. @4 m: ~
e.printStackTrace (System.err);1 q, b! r+ S, I/ i) u
} s3 C3 s; x6 b8 v8 U; d% P
- s' ^0 {5 B! e. }
syncUpdateOrder ();# P$ R# E/ N4 O' H+ ~( X
! ?) ^ S. Y7 E4 N
try {
8 A* |7 c1 V) M4 ^ modelActions.createActionTo$message % g/ r4 h, a1 E6 m' R0 r: t, O
(heat, new Selector (heat.getClass (), "updateLattice", false));+ j4 J3 @) y U0 j$ m
} catch (Exception e) {
2 G9 Z3 s3 @) d9 g% P2 T+ |8 } System.err.println("Exception updateLattice: " + e.getMessage ());
, ?5 K9 Y z7 {& d' V }
, \: ^5 x) X$ i8 a 5 B1 S, H! A& w4 g& j! r; u& _
// Then we create a schedule that executes the
4 B/ w9 @% N7 Q n8 g& ]6 t& P9 L2 G // modelActions. modelActions is an ActionGroup, by itself it! {. [" n# K z- o. X
// has no notion of time. In order to have it executed in) x! |4 l+ k7 Q, f9 M/ l6 N
// time, we create a Schedule that says to use the! _) Z/ {' \2 o9 v
// modelActions ActionGroup at particular times. This
3 j7 t: `# f& S' o2 E) ?, Q, p% r+ e // schedule has a repeat interval of 1, it will loop every: P5 e6 f4 v9 Z6 h8 F
// time step. The action is executed at time 0 relative to/ i1 E. \9 Y" J/ T# P7 N
// the beginning of the loop.
9 p8 \* I; \5 J+ b* d( c1 Y
/ C) N2 i e! C9 F. e W% Z // This is a simple schedule, with only one action that is
8 H9 {* J7 K. f ]: _1 z // just repeated every time. See jmousetrap for more
* W9 S; B2 t; p5 C7 T& m& B // complicated schedules.4 p9 S, \% u9 d2 j1 h( U. |2 I+ x
9 r6 n- p0 |) x modelSchedule = new ScheduleImpl (getZone (), 1);
9 f* |, H1 @: p0 G7 d; D9 k modelSchedule.at$createAction (0, modelActions);
7 P9 A$ n% j5 ?: _ f4 Q9 N8 l 6 k' j# v2 j1 g3 s$ _. b
return this;
: t' h1 u+ l, r* o3 Y } |