HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 u9 E |% c7 M4 t% u
: _- }7 z$ y! n; s' w U public Object buildActions () {7 K8 L3 h& U0 Y. W
super.buildActions();
1 A5 ?) G8 {# Z) W7 h
P) S& J, t# S9 I* F. b; h // Create the list of simulation actions. We put these in* a- s& c; `) a7 L$ A# o* q0 u* h
// an action group, because we want these actions to be
6 e+ I d2 e, g // executed in a specific order, but these steps should
& s! ?* E5 E2 x$ c // take no (simulated) time. The M(foo) means "The message
1 E% _9 f7 w# C* L; b // called <foo>". You can send a message To a particular5 R8 }* L2 h# t9 N# E/ b$ ~" \
// object, or ForEach object in a collection.
- a: q' Z9 \! L/ n' j6 D & r0 k' C' k$ ^; V% O1 w
// Note we update the heatspace in two phases: first run& f6 y2 N- r' R- `& a
// diffusion, then run "updateWorld" to actually enact the
3 ~1 ^+ Q9 T4 \1 D5 {5 b // changes the heatbugs have made. The ordering here is
1 v$ k. ^' ?- R5 v- K# d( d9 e // significant!
2 c2 T, @+ f4 v& X
9 R$ p+ t+ E* K$ l" C" B // Note also, that with the additional9 Z* v" J8 x* p) O0 z. \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 E" N. B1 d3 o/ b // randomize the order in which the bugs actually run
7 Z+ b/ B r" V8 ^6 G+ r // their step rule. This has the effect of removing any; u, h9 C1 ?7 }9 T' C& G
// systematic bias in the iteration throught the heatbug
9 ^ V/ e; W- \) h9 i // list from timestep to timestep
7 W0 p3 a5 _' x, K$ w+ j 9 r5 \& {; v7 G _% X% P
// By default, all `createActionForEach' modelActions have
* u. \4 B; \7 a" b; G( j% C" \+ a // a default order of `Sequential', which means that the
: r: g( W+ h+ X) h0 [ // order of iteration through the `heatbugList' will be- N! g. H1 F% T
// identical (assuming the list order is not changed
7 |, v! W( P3 F" v G9 | // indirectly by some other process).. s1 D9 k2 S7 X3 `/ h
9 A Q: P) z( @ W! G3 D( o modelActions = new ActionGroupImpl (getZone ());1 C' l2 m# X/ S2 S& p, ?
+ L7 k, r: G) o9 U* S! a) k
try {
. o* U$ K5 V3 T& k modelActions.createActionTo$message1 K0 M0 O# z# r
(heat, new Selector (heat.getClass (), "stepRule", false));
! V8 Q1 n# s" B! t4 M. {( d" @ } catch (Exception e) {
) G( @; \4 f b System.err.println ("Exception stepRule: " + e.getMessage ());
/ u$ o: ]0 w8 K5 H0 }& C }
& ^* m) B* K1 I2 C6 ~# B
, {. H$ d( \* G* Z1 t4 u try {
, O* s3 i" ~" G* ?/ r7 N( c' Q Heatbug proto = (Heatbug) heatbugList.get (0);
2 }( l- H: J# x x) t Selector sel =
5 V/ ]6 h' G" u8 v4 r% n new Selector (proto.getClass (), "heatbugStep", false);4 k( R. W3 I, b* _: v
actionForEach =! o3 ^' E; G# C2 F1 J% J% L
modelActions.createFActionForEachHomogeneous$call
8 M, p4 i# d! K% J. I0 ^ (heatbugList,
0 }3 j3 K% J9 n/ {; d- M new FCallImpl (this, proto, sel,) _+ R8 j H: w. T2 A9 Z9 K. ?$ L
new FArgumentsImpl (this, sel)));
1 u/ s& C: B+ d) a0 I } catch (Exception e) {
K( X. m! v5 o; @2 b e.printStackTrace (System.err);
9 Z0 a& o5 @7 e- D/ ~$ g! z- T }
2 ]1 P( [$ O# X2 h$ V9 {
" f/ S3 e1 `; O, [# q- ] syncUpdateOrder ();2 i. s! y; \- b- Z; o/ F
# E" g W- L& z, A0 d4 k' r% s try {
% I7 ?* k7 Y [* ] modelActions.createActionTo$message 5 d5 ~& ~$ w( _) \; K5 f( ]5 I* Q
(heat, new Selector (heat.getClass (), "updateLattice", false));3 r- a. T! E& h
} catch (Exception e) {
7 a7 l& X- k6 _ System.err.println("Exception updateLattice: " + e.getMessage ());
- S- f5 _. i( U+ A4 @6 Z }1 p9 L* Y7 g+ X
) |& K' d" }$ D! p8 N G) U // Then we create a schedule that executes the
. B W. Z% h; H: }" T( a/ ~ // modelActions. modelActions is an ActionGroup, by itself it
% T) u0 r3 I6 Y$ g6 Y, p // has no notion of time. In order to have it executed in
; Z; n3 x+ ~5 G // time, we create a Schedule that says to use the* _3 R4 C1 a7 r K! Z( g. m; O
// modelActions ActionGroup at particular times. This
( H" |( _' U' ~7 T; W+ p // schedule has a repeat interval of 1, it will loop every0 L1 r5 g( f- q$ g% E1 x" [9 \
// time step. The action is executed at time 0 relative to- s: q4 O6 z' Q9 e1 W# f
// the beginning of the loop.1 x4 n/ H2 @7 L8 Q- m
4 ~8 a: o' U2 o+ g
// This is a simple schedule, with only one action that is8 _% B2 e) n5 B: {
// just repeated every time. See jmousetrap for more
2 L% [/ Y3 T4 @/ `& o9 z( W) A$ M. f // complicated schedules." D2 p" f# i- F
$ H Y" ]: m& y
modelSchedule = new ScheduleImpl (getZone (), 1);
1 e% T3 Z' A \" Z modelSchedule.at$createAction (0, modelActions);2 q$ }1 C1 K# ?) Y. u
) W* [( ~1 J0 ^: C
return this;
7 y" l( X5 @- e% ~; I4 ?% r: C4 b } |