HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' E9 d% \; I3 }9 u6 g W
. L9 E) V: G1 z5 b# I. V( q public Object buildActions () {
! B( k- j, V1 F; v0 I) i super.buildActions();4 c! z# p: a3 m5 ~5 ~) n2 K6 ], w3 |' j
& l8 l, ^7 a. V7 K$ M- X // Create the list of simulation actions. We put these in
! p6 l' I% w2 B+ f y& m% D // an action group, because we want these actions to be7 n' E/ p- c/ K- D
// executed in a specific order, but these steps should; Z- F' g/ m; \$ D+ @
// take no (simulated) time. The M(foo) means "The message
/ _: i% r/ v! V5 J2 e% V5 d // called <foo>". You can send a message To a particular
, A n. _, H& @6 R! t // object, or ForEach object in a collection.' @! m- }7 D8 u0 b9 x1 b
9 S8 Q# D1 O7 A) Y7 e+ I( q // Note we update the heatspace in two phases: first run
# @+ Y; Z* |1 H/ O // diffusion, then run "updateWorld" to actually enact the
2 R: v" E. g* M; f6 C // changes the heatbugs have made. The ordering here is& i% [8 L8 ?0 z/ w' B
// significant!
: J9 @2 Z# u0 L) M' F : O( v7 a: r d! m0 [7 X' c8 \
// Note also, that with the additional
9 s8 X; n% `0 O // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ g$ a2 _; A; { N // randomize the order in which the bugs actually run9 x5 H9 R& Y4 D ?( W
// their step rule. This has the effect of removing any
2 j8 y& d1 V4 C1 [+ M2 h7 ~# v // systematic bias in the iteration throught the heatbug
7 T+ w# r% @& L$ D; a7 R1 Q // list from timestep to timestep
% {1 ~1 M9 o; d. H; { }; N+ q
2 U: q5 ~$ v" ^4 K5 b8 w6 x. P# ? // By default, all `createActionForEach' modelActions have% ~1 ^- |/ H/ I S- l
// a default order of `Sequential', which means that the; c: i# G# N( f5 U+ w! w
// order of iteration through the `heatbugList' will be
: C* F: I8 o1 [4 @8 [ // identical (assuming the list order is not changed
# C, M( Q+ S. s+ b$ {9 f // indirectly by some other process).
( \! _6 w' R+ c) {
- ~6 p. Z3 Y1 {2 a. z. ~/ h- G modelActions = new ActionGroupImpl (getZone ());
7 t: e- r6 N9 s& v# V
! S$ d" K9 U w) ` try {. K/ ]% j# n6 L0 J3 v: L
modelActions.createActionTo$message# w! I! h! t, r4 u4 v) B9 k
(heat, new Selector (heat.getClass (), "stepRule", false));
, i7 }+ t& ]+ c; t8 m$ K } catch (Exception e) {
- ^8 U; q* G/ a System.err.println ("Exception stepRule: " + e.getMessage ());' B5 d" S2 Q6 V: `- I
}4 ]% _. Q, b; b' K. U
/ ` v! a0 V4 _! \5 y* [
try {: o6 Y: g; z! a! X
Heatbug proto = (Heatbug) heatbugList.get (0);
& W$ V: I8 G, e) B. o5 Y Selector sel =
3 s& A7 h3 @! V, X% Z* q new Selector (proto.getClass (), "heatbugStep", false);
1 W& N1 A, [" K' [8 z' L( ^$ E actionForEach =
# Y: J- x. j* {7 J4 B2 g modelActions.createFActionForEachHomogeneous$call" M8 P* A& @/ _' _
(heatbugList,
1 A' Y0 S: A9 g5 X new FCallImpl (this, proto, sel,9 @. z" z6 A" q( g. c- P
new FArgumentsImpl (this, sel)));$ j3 ?+ r# b2 I2 u3 J9 R. J
} catch (Exception e) {
0 Y; i( i4 q$ D# b: Y1 X e.printStackTrace (System.err);7 D( x! o; O; h" K P2 a/ k
}5 Y G$ Z# Y0 f9 J# J% v: D
# p3 I) d: f. v' \, h2 F" I0 Y! |5 O
syncUpdateOrder ();
) h: l% Z1 {2 I) @. m+ }8 |6 S1 N) G$ d2 n2 j- U
try {
, e3 `, p6 m' C5 m modelActions.createActionTo$message
9 v" T i2 Z, r3 c (heat, new Selector (heat.getClass (), "updateLattice", false));8 z% ?5 r; q" f/ y$ c
} catch (Exception e) {8 \/ ] x/ h4 [; H. l1 V% e
System.err.println("Exception updateLattice: " + e.getMessage ());: k) ^( ^ o- v5 P+ u
}
6 |3 s7 ]6 h% R+ J# \ 8 L3 {' H$ {6 W5 W. Y
// Then we create a schedule that executes the
$ a* A+ L" R k- v' X8 c0 U. s // modelActions. modelActions is an ActionGroup, by itself it. T+ A% R! c& b! D! f9 P
// has no notion of time. In order to have it executed in6 c n% P( V0 r& Y8 @3 O6 ?- o1 ]1 j
// time, we create a Schedule that says to use the$ R6 X$ I; ?' F, \! Y8 ~
// modelActions ActionGroup at particular times. This5 J$ p' `; r* ^' E* U' u" B0 {
// schedule has a repeat interval of 1, it will loop every5 r( B8 a+ B+ I! o+ B% p8 c
// time step. The action is executed at time 0 relative to
4 Y/ D6 X& J' @9 ]8 G, x" t2 C // the beginning of the loop.
' G- B' g% {2 O) r9 {* I. F/ H) E. J9 Z, k
// This is a simple schedule, with only one action that is- |5 C* X0 \! e/ c: q
// just repeated every time. See jmousetrap for more
2 [! ]: b# P3 j) v+ f; U // complicated schedules.
; ^3 J: a: f, K
9 O. F) b# p- m9 j5 J modelSchedule = new ScheduleImpl (getZone (), 1);
- e; X( N- L9 q1 x }4 C- g+ Y$ k modelSchedule.at$createAction (0, modelActions); f- v2 L0 f/ C4 @, {; A- r0 D7 ~
! P0 n, K9 Z. N: D T$ B3 C return this;
" ~0 a2 J* x/ {, _0 _. E e" T6 s } |