HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& {' d$ C% O+ H; b8 w" I- b+ H5 t) Q) M* ^$ H5 U/ ]
public Object buildActions () {0 i/ ]% {% w( |$ V1 D% M2 }
super.buildActions();
" U7 Q; S2 s/ ^8 b) E4 p9 i . }. ]2 d2 A1 B( P$ b/ r
// Create the list of simulation actions. We put these in7 _& P0 |& r0 W& W! m* H' a4 p
// an action group, because we want these actions to be
9 _; W) w( o, f/ b& A; f // executed in a specific order, but these steps should& }! B. N/ H( d! w' x* ^/ N5 A! I* n, e
// take no (simulated) time. The M(foo) means "The message
! _7 o7 _6 I( F. K' l6 m // called <foo>". You can send a message To a particular4 H. s* q2 R. @: a
// object, or ForEach object in a collection.
# l$ f- r3 F7 c0 n! P4 X& Z7 } 3 E S: X3 y% m: i0 _, S8 T* @
// Note we update the heatspace in two phases: first run
]: N5 m1 M. B7 v+ l! T" { // diffusion, then run "updateWorld" to actually enact the
) Q7 i8 ]) l5 J$ A7 X8 Q // changes the heatbugs have made. The ordering here is
8 h% V8 v8 M: L3 f% c ~, w v& ]% [ // significant!$ r: h& k6 k4 g7 @6 q( t
' h- C Y7 ^2 x% [4 S' Y' z2 S4 z // Note also, that with the additional
6 t! y6 L# W9 l$ A5 k* j9 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
) [$ v' Z1 p* D1 [* ~0 {1 J // randomize the order in which the bugs actually run
9 [6 {- y; T) ]+ _ f" s, t1 @ // their step rule. This has the effect of removing any$ @4 o: U& N; L: f
// systematic bias in the iteration throught the heatbug
1 J; y" j) a7 |& [ // list from timestep to timestep
. w$ w( e: D9 B3 Y* ^; f! x! }
" [8 r1 j5 Z1 X5 o' l( R // By default, all `createActionForEach' modelActions have Z" u' d9 N1 l0 z; z
// a default order of `Sequential', which means that the
% V* J0 C) R, c* `) H+ A% x // order of iteration through the `heatbugList' will be0 i3 T9 I" W5 t m9 l6 R
// identical (assuming the list order is not changed
* A1 m& ~0 h" C6 m7 T& n* z/ x4 G. A // indirectly by some other process).
& a" i3 b5 r; E0 e0 ]2 U4 N/ s1 |" p & Y* {2 k2 \" O& v: W+ K' v. }8 \3 Q
modelActions = new ActionGroupImpl (getZone ());
& j: W$ K# k" }$ ?% r) J/ n! ]8 C# A4 n8 B
try {: x$ h, i" r7 r/ p7 e9 v% ?$ u
modelActions.createActionTo$message: T" p( ~0 n( T ~2 Z% f* Q
(heat, new Selector (heat.getClass (), "stepRule", false));
! ?5 T- D$ H2 Z2 C& {2 x7 G5 E } catch (Exception e) {
3 w6 G3 ~# F/ T4 z! T, f8 Y System.err.println ("Exception stepRule: " + e.getMessage ());; q4 K; z! Z# t8 G6 _8 @4 `& F
}# ]" ~ R+ `, z1 o! b9 e" h* q% p
$ X( b7 S/ W$ e- g- | try {
) D5 k8 C; }8 l4 E' y9 }" ?/ [: @ Heatbug proto = (Heatbug) heatbugList.get (0);, O6 E" i( B3 t m) r0 a, x2 I
Selector sel =
& k4 o5 I9 E7 x new Selector (proto.getClass (), "heatbugStep", false);
7 u/ k" @9 R$ a5 ? actionForEach =
1 L- k9 o A0 v: o: `2 Z modelActions.createFActionForEachHomogeneous$call
- o( D4 C7 D1 @" E2 ?' o+ g (heatbugList,2 ~, h# W" T# P1 X" q5 H. W6 ?
new FCallImpl (this, proto, sel,
; h5 w* [0 P9 h$ h5 H/ x i new FArgumentsImpl (this, sel)));! J* X& Z- h$ q. X7 d
} catch (Exception e) {
; P, v: b9 M" C0 L/ A e.printStackTrace (System.err);
+ L6 ]% s7 c: e+ }& U1 { }
' W0 H7 ]/ B( ~- Z" v3 M3 A3 C , g4 j( @" k) B
syncUpdateOrder ();" c' T% G# o5 i0 v% l- l4 \8 o
9 E# V: j' Y& E, a) p9 k
try {
$ m4 m9 x X, ?* e6 W1 Q2 e modelActions.createActionTo$message
x4 d5 P0 v, ]# }4 B: J2 A: R (heat, new Selector (heat.getClass (), "updateLattice", false));
7 C! T4 p7 e+ H8 t } catch (Exception e) {, X( J q. ] i% j4 A5 f! e
System.err.println("Exception updateLattice: " + e.getMessage ());
0 W) x. E* N' t. X ]1 ?! v) ]" k2 ? }, @2 [$ g' `7 }; e
1 F" T. r6 J7 t; n // Then we create a schedule that executes the4 |5 [* G) r& p- d; j7 W
// modelActions. modelActions is an ActionGroup, by itself it
& \) D/ N+ K# b* Q( D$ t: j // has no notion of time. In order to have it executed in
3 L% N- Z u- A5 S/ @) ] // time, we create a Schedule that says to use the, D( J( @- ~! q7 j2 I
// modelActions ActionGroup at particular times. This/ R; K6 T1 o/ Y( f( r6 \; l
// schedule has a repeat interval of 1, it will loop every: W: S/ [: G7 K& r
// time step. The action is executed at time 0 relative to
: C- [8 G I l7 ^9 L5 z w% ? // the beginning of the loop." I9 l# ?4 F) A- p
/ m0 Z- y1 z8 u5 P6 _1 a* a r1 M
// This is a simple schedule, with only one action that is. s& b9 h- I/ v9 ]3 |6 _
// just repeated every time. See jmousetrap for more
! C" Q- K( b$ c; ^5 _: t1 k) s9 P // complicated schedules.
- c5 `( B& g0 V, y$ N6 T* e - {8 h. n5 r3 t+ H4 x
modelSchedule = new ScheduleImpl (getZone (), 1);: ]1 P& ?0 }4 g8 P& L
modelSchedule.at$createAction (0, modelActions);$ J+ ^' |- p$ n8 u5 u
7 ?1 b: _5 X; g. v return this;, m( R# x( y. E! R1 S' i( E
} |