HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) ~0 y% U1 V7 V' J* ]+ f) u1 {) e% {& _% l! F5 d2 r; @: N
public Object buildActions () {
( l1 y. r3 B2 p* o; A8 r) r. K5 A super.buildActions();; G6 ~& n `" E) b$ b( V- p9 w
L' b7 H! d/ P( z( |, y // Create the list of simulation actions. We put these in
" }# h0 I+ \: C // an action group, because we want these actions to be
5 ?4 r( R% ^3 a7 m) Y3 c ` // executed in a specific order, but these steps should0 Z, O. S" Z9 R/ z& D' |! k$ O
// take no (simulated) time. The M(foo) means "The message
6 B. x9 k# R7 i: o2 ?# F) R // called <foo>". You can send a message To a particular8 ] T# B/ ]2 w& j9 ]2 K: j
// object, or ForEach object in a collection.. X1 I) h6 I; l( J( P
! @9 R& I: I! N" A+ @& g
// Note we update the heatspace in two phases: first run% v4 n8 \. k( P3 i8 C: [6 N
// diffusion, then run "updateWorld" to actually enact the9 t0 R/ B" ^! H) e4 P
// changes the heatbugs have made. The ordering here is
( Y4 x3 I2 X' x2 ]) L; @ // significant!
* |; \! W, [$ Y9 G6 P+ f* X
, D' M9 n; P' T* o5 L) u // Note also, that with the additional
0 c* ^$ l4 N8 L, z% a; b0 A // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 U# T9 G: O2 y7 T // randomize the order in which the bugs actually run
- V; L* m; R' D9 D( k/ l // their step rule. This has the effect of removing any6 ] l9 x1 y: ^* L5 O
// systematic bias in the iteration throught the heatbug
4 K+ K( g( M. j+ c9 _" F6 ` // list from timestep to timestep6 x- T( e* ^* ?2 L# F( j* P, m2 {
/ K$ y" o2 @+ @ {, _" d0 r // By default, all `createActionForEach' modelActions have
- v6 `6 [6 t/ K+ W // a default order of `Sequential', which means that the
# P* I3 a% I8 f7 S% R4 D, I! K. V // order of iteration through the `heatbugList' will be& V0 Y2 {$ U, |7 I" b
// identical (assuming the list order is not changed
+ F' l: D; ~2 b- }5 T$ b! E // indirectly by some other process).7 }& T, D) l1 N/ r& u9 |
7 q' C, w: m' g" ~
modelActions = new ActionGroupImpl (getZone ());5 X$ F0 U7 F4 L: c4 J
( m6 i2 z) ~5 B5 f6 q
try {
) Q6 w; _- f1 {' a6 z modelActions.createActionTo$message
$ e: j+ ]1 _; Y4 o0 i) J (heat, new Selector (heat.getClass (), "stepRule", false));
. d9 s6 N9 G$ Q! z } catch (Exception e) {
% m) I8 r; L E, T' W3 {- X4 G System.err.println ("Exception stepRule: " + e.getMessage ()); d+ a2 g0 a: E7 Z# c
}
7 f6 U3 E. m0 B$ U- v8 b8 T- i/ E5 Q( J% o$ ]' H
try {
- S' F. B" o8 r" I: M4 j7 U; S2 I Heatbug proto = (Heatbug) heatbugList.get (0);
# q1 k/ e! W6 Y$ g Selector sel = $ S8 p5 l/ O1 t
new Selector (proto.getClass (), "heatbugStep", false);
! f) L, `9 s( U* Q* {" A- b+ [ actionForEach =+ T2 Z) B0 f; b; M, K
modelActions.createFActionForEachHomogeneous$call% e+ [0 u6 @0 n% G! z
(heatbugList,9 V3 G2 X7 I: _ N
new FCallImpl (this, proto, sel,
" O# _4 M1 g, g! A7 s# y new FArgumentsImpl (this, sel)));
/ D5 C. [6 u: J) @7 l } catch (Exception e) {
, a, l2 F+ b" h5 T' F* g e.printStackTrace (System.err);: @8 @( d, g; ~+ Y
} T9 {* v6 v8 c
8 ]- P+ C6 x2 u; d$ h syncUpdateOrder ();' t* I6 _+ z" k3 T& H+ H* ^1 \
0 c0 e: M1 o7 W& Q8 Z! Y4 K1 F
try {) h" x0 Z& {9 `; y& p f4 g
modelActions.createActionTo$message . u5 Q' U( R, j- d0 A& V5 o. [3 b
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 k4 o5 `! S$ T8 c) L& y } catch (Exception e) {9 m- Y5 l0 i9 ~; j4 ^9 z
System.err.println("Exception updateLattice: " + e.getMessage ());" k8 w7 u9 [0 f, \6 }
}, _0 w6 D" Z2 m4 [0 t% t5 H1 g: x
' N8 Y$ d: r8 H6 U* `6 L
// Then we create a schedule that executes the
2 @$ O) X* F7 Z // modelActions. modelActions is an ActionGroup, by itself it$ N5 s6 U! Y5 A+ Q7 O( ?; k" C7 g" c
// has no notion of time. In order to have it executed in
' j4 A" | b4 C" F1 Y2 g2 j2 {2 b // time, we create a Schedule that says to use the
9 \( P! i% z/ D // modelActions ActionGroup at particular times. This2 k# q6 L- F; i- e% s
// schedule has a repeat interval of 1, it will loop every
- O* L$ ?4 o1 @: j/ Y // time step. The action is executed at time 0 relative to0 {* N5 X7 m K; `2 l
// the beginning of the loop.: O0 t8 k5 |/ M7 G
7 z* g2 C2 j" E; i3 {) [
// This is a simple schedule, with only one action that is- Q4 c& }: N3 G( [, S0 ?
// just repeated every time. See jmousetrap for more
+ d% r' O* d) Z* }0 R // complicated schedules.& j: B# M! h7 R% Y$ z
* ?$ K4 y% T/ J% ` modelSchedule = new ScheduleImpl (getZone (), 1);5 w y5 D- v# k) @+ M
modelSchedule.at$createAction (0, modelActions);
8 \2 k6 X, Q8 ]2 R
4 y! Z% y7 y$ F return this;
; N4 ^1 ]' a1 f4 w6 M; ] } |