HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& x; M, v! ~- T8 k: F* n
# P8 ^, w1 B4 v
public Object buildActions () {7 J. [% f7 C6 ~" U
super.buildActions();
" x/ Q" O" T7 ~- p* I/ V $ D4 U, `7 j" I5 n' X# @
// Create the list of simulation actions. We put these in
% a) X: `1 y; z0 n, S1 P // an action group, because we want these actions to be
" m' N0 a4 a( M0 q* q/ } // executed in a specific order, but these steps should
! Q2 _9 W3 t4 m: w" w6 ?, y // take no (simulated) time. The M(foo) means "The message" M" L0 w4 y$ p6 t9 ~- K
// called <foo>". You can send a message To a particular
" I' q7 p6 Z! G // object, or ForEach object in a collection.2 O l: \, ~9 O
9 y, g4 B0 }1 J; c% w5 Y$ ^. w // Note we update the heatspace in two phases: first run
, [; z& q! q9 {3 N6 W9 T // diffusion, then run "updateWorld" to actually enact the( w0 g. c. }' L# R# F O# H
// changes the heatbugs have made. The ordering here is4 S# |; \' V0 f* I
// significant!
2 i, |. t* |' d1 y! F " g. s! I& k- R& N- m% }, ^ B9 z
// Note also, that with the additional
* Q( t/ H7 O& {7 o# P: B7 S // `randomizeHeatbugUpdateOrder' Boolean flag we can# m* V' @0 g3 c: J2 \% `
// randomize the order in which the bugs actually run
- B5 A$ l0 N7 ]/ b" j8 c# K; w, s // their step rule. This has the effect of removing any
: s, B J7 z' i0 E // systematic bias in the iteration throught the heatbug" ~) U, q8 `8 f( |
// list from timestep to timestep
& _0 E' U, o5 S0 Y+ [ # M8 p' ?1 I) j, j1 x( V
// By default, all `createActionForEach' modelActions have d% V9 v2 ?$ l- C. @, X$ N* {
// a default order of `Sequential', which means that the
& ?+ C# Y! j/ i, Y! e1 v5 R2 A // order of iteration through the `heatbugList' will be
* ?" T( J( ^# Z( G1 R9 N // identical (assuming the list order is not changed7 h# E X! z6 w2 h: S, c+ U; \' L. _
// indirectly by some other process).
/ {1 z2 H4 z2 T+ J% x4 e6 Z U$ n. N3 F' [! H
modelActions = new ActionGroupImpl (getZone ());" D5 _1 v2 E! H+ L! V: Z
; }7 g6 B" ~: `; r1 C
try {
: L' {* ^0 A3 \7 W modelActions.createActionTo$message
+ @. R9 O. o( [! p; i% O (heat, new Selector (heat.getClass (), "stepRule", false));0 `* Q* P3 f) n) d7 U y
} catch (Exception e) {5 L4 H, d6 D# V9 e; \" c0 l, _2 ~: G
System.err.println ("Exception stepRule: " + e.getMessage ());
9 N- n! i+ S2 B, n7 ~3 R }/ g$ Q, Z# e4 v" ~7 Y% l( O
" E2 C0 O3 C! ?& G g" E
try {, F5 O `6 B3 b* n
Heatbug proto = (Heatbug) heatbugList.get (0);
, q$ D: a" f& T+ k; e! i1 Q) q Selector sel =
$ |/ g" u" O3 d7 k8 |8 Y8 E! U new Selector (proto.getClass (), "heatbugStep", false);
- v. C- V' m- h* w3 X4 U+ |: j actionForEach =
( ], G+ I( |* @) Y6 U# ]# ?9 h" z" O modelActions.createFActionForEachHomogeneous$call$ o( N) x$ G3 U7 g2 k D
(heatbugList,
6 w" m( a+ J& t' C1 } new FCallImpl (this, proto, sel,# Z" X4 h9 t6 |, j) ~9 p: |
new FArgumentsImpl (this, sel)));& X! Q: H# L. ^6 @
} catch (Exception e) {
3 X' s) [* z+ e# a. { e.printStackTrace (System.err);
0 C/ ]! n' P" `& s7 ?* o | }
3 t8 J8 [( F: n# {, X4 b/ d% R 8 V( u) ^, r: y d
syncUpdateOrder ();
8 O% `: \ b3 w/ q, s
" D* U& W* m; U: x; I. C try {6 a3 J* H2 K6 {/ M' `( e/ E8 h. e
modelActions.createActionTo$message
) v8 S6 S' l+ H \5 I (heat, new Selector (heat.getClass (), "updateLattice", false));
P* c1 T4 ]) _ H F& E# u } catch (Exception e) {) f! O- F. k' e( h. Q$ ~
System.err.println("Exception updateLattice: " + e.getMessage ()); h B" v. {3 J) |
}
* k5 ^% }! [$ J( M1 P1 Q0 B8 f
" I2 N1 ^9 U+ u+ ]* j // Then we create a schedule that executes the B j1 ^* w6 N2 ~5 Y7 n9 W7 T
// modelActions. modelActions is an ActionGroup, by itself it
* v2 f4 e3 ^/ @ // has no notion of time. In order to have it executed in) e9 n4 |/ e7 O9 n0 j; |/ @
// time, we create a Schedule that says to use the6 `/ Y# z, B% \! i& [4 p# Q
// modelActions ActionGroup at particular times. This# v8 o. T: o1 K4 }. h9 Q$ f
// schedule has a repeat interval of 1, it will loop every
* _2 n# J4 ?; T2 f& }" ` // time step. The action is executed at time 0 relative to
0 u1 v* u. d r+ [. a2 |; @0 r1 o# h // the beginning of the loop.1 V! ~ e; Y9 v8 C' g3 S! Q: X
% S. H0 a* z) p7 w7 d/ E // This is a simple schedule, with only one action that is) m$ t$ ?2 P3 W* q) Y3 k
// just repeated every time. See jmousetrap for more% }* G% J8 |% {% C4 K
// complicated schedules.8 @/ | s+ z4 ^. ^6 P2 R6 T, v+ w' ^
6 O$ @( N4 Q0 ^* _ modelSchedule = new ScheduleImpl (getZone (), 1);
& N; s) d( k9 j" u5 x$ d7 ] modelSchedule.at$createAction (0, modelActions);
/ F$ f6 Y( M4 P" l, v, I 6 n) A. B" p7 z
return this;
1 i, @5 ]9 D3 u } |