HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ `' Z" U* ^) P }' f4 u
" h) H7 l/ Y( H, ^3 z j public Object buildActions () {5 I- [( u. c! U5 D- Z& H
super.buildActions();. W* C1 h1 E9 D( M, v
( d5 O2 n3 E0 g4 m: ^+ p9 W
// Create the list of simulation actions. We put these in
& s* U. q5 W$ c& f& A // an action group, because we want these actions to be
8 I( [0 A6 F q; Z) X& C/ g0 O# ]" Y // executed in a specific order, but these steps should
% t7 Z) S6 x' U" d, l Y // take no (simulated) time. The M(foo) means "The message7 e) _) ^8 \: o8 E6 s3 T% s/ `0 @
// called <foo>". You can send a message To a particular
/ T* Q7 W# a0 Y1 P. d3 y: B# Y; A // object, or ForEach object in a collection.
9 |% Z r5 C) d2 W1 A9 W5 M. A
4 r8 F& F, Q; d- O // Note we update the heatspace in two phases: first run% w- { p7 g: o3 d4 ?* `
// diffusion, then run "updateWorld" to actually enact the
$ I' B4 a* G6 R$ `, h; ^ // changes the heatbugs have made. The ordering here is
. ]5 \6 o B3 \3 Y // significant!4 c0 {* t: q6 z, I4 B* ?0 D/ @1 G5 E
# h8 s s+ u- b; G) n2 j
// Note also, that with the additional# X4 `( k9 b% { S- s% j) r. E
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' A# P9 ]! W% T, u // randomize the order in which the bugs actually run
& f ~! J6 _" D: V // their step rule. This has the effect of removing any4 {: ]3 o* M8 X+ I
// systematic bias in the iteration throught the heatbug
& \" x# F7 d2 G" e- z( I/ S7 c // list from timestep to timestep3 r3 T0 p7 d' T' L0 n y
& }4 I: {1 f9 V // By default, all `createActionForEach' modelActions have
0 c. P. |8 u0 }) |% O // a default order of `Sequential', which means that the
; w. x; B1 M. E/ z) v // order of iteration through the `heatbugList' will be' L/ r4 L& j( x) C7 O C
// identical (assuming the list order is not changed7 l. \% @$ ]: X6 _6 X7 C
// indirectly by some other process).6 C4 {1 |' I+ E% U1 o. q
9 O. l: g9 @- N) G8 L9 g5 \ modelActions = new ActionGroupImpl (getZone ());' K( Y5 c) Z% q8 F" r# m$ n5 E
+ a8 [: b ]! x/ W/ t
try {
, J( D$ K h7 k2 l( z modelActions.createActionTo$message; j% u2 r6 _; k. t" K E, g/ ~
(heat, new Selector (heat.getClass (), "stepRule", false));
+ b: |% d8 S- \, L. C5 S" r } catch (Exception e) {, k* w V( V4 J6 j! `( b
System.err.println ("Exception stepRule: " + e.getMessage ());/ c! ^( e+ q* q' A+ a! a4 o
}
. K& r& i6 K/ G$ c5 R8 i; ?
+ J2 J J( l5 `; H: |2 W1 ` try {- }" e( Q% U; q G
Heatbug proto = (Heatbug) heatbugList.get (0);
0 v2 _# F3 q/ K" @- D! K Selector sel =
8 I$ t6 y! O) [& Y0 i; X' Q new Selector (proto.getClass (), "heatbugStep", false);# n2 s T( W: X" f" Y$ ?( E5 ~
actionForEach =
" U1 J, ?. T9 h4 W* ] modelActions.createFActionForEachHomogeneous$call
: T5 ~6 K. T: Y# j, f! V$ g (heatbugList,0 i' E" R, C Q- x+ m! M+ H
new FCallImpl (this, proto, sel," O! H+ W7 w, R9 d8 a# h
new FArgumentsImpl (this, sel)));) Z/ A! Q3 B5 d7 N* }
} catch (Exception e) {
5 \; d* a! s' E9 E" X l6 i) E5 X e.printStackTrace (System.err);
" ^" T. m! u, m/ v& {$ V2 M }, g9 n5 M0 ^% \. T4 `* Q7 v
+ E* z9 |3 _( ~4 Q0 F syncUpdateOrder ();
% A: ~9 v; y3 b ]; M
( f$ n( }8 i' y i- A" w try {; a0 v( G3 e* o4 n
modelActions.createActionTo$message 2 \4 v: ^' l7 D4 W2 G t9 ~8 j
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ m4 Z# }8 B W- m+ U7 }: H$ ? } catch (Exception e) {5 O4 ^3 p& G4 S
System.err.println("Exception updateLattice: " + e.getMessage ());. r& F+ o- Y' T1 E( l. C/ g. `
}, g! R, _. \$ c" e. ]
0 z+ h `1 U/ w: M
// Then we create a schedule that executes the' N; J: y$ _7 r3 p- ~1 U- k, q8 }, K
// modelActions. modelActions is an ActionGroup, by itself it K4 K; J: U% u1 d2 F# `: g
// has no notion of time. In order to have it executed in6 X4 \1 M% N; k/ B- P" E+ F
// time, we create a Schedule that says to use the. C9 O& e/ E, j- Y2 M3 R& p, s
// modelActions ActionGroup at particular times. This% D; x8 a& [9 [5 |
// schedule has a repeat interval of 1, it will loop every
* {8 ]! U ^" F& ?! Z( L // time step. The action is executed at time 0 relative to( ~' W% i% z! ^# J+ m; s
// the beginning of the loop.
7 ~; `' H8 Q6 G( I
4 P+ p$ D7 K3 t/ d) K- b) v // This is a simple schedule, with only one action that is+ Q; R% n7 k: H' ^
// just repeated every time. See jmousetrap for more
+ T0 R( }# n# |* k( _6 C // complicated schedules.
! t# b, \( T; h1 H/ I 1 U1 o0 _$ ~. o2 A- @
modelSchedule = new ScheduleImpl (getZone (), 1);
, i# S8 D- a# T3 _7 K, J& U modelSchedule.at$createAction (0, modelActions);
* |+ }& A3 v/ l# p " @+ e. N- u7 f0 z W0 x. w; ]
return this;
$ I' n9 G5 ]. x0 i7 R! I# W } |