HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ k3 L9 K6 U' a0 G8 _8 C6 |8 A- c3 ^! w4 {' n. C5 I/ n; [2 A
public Object buildActions () {! U# q" h1 B" {0 y
super.buildActions();
& n6 k: F8 k3 A# V' H6 N & Y2 b' S/ z5 J" n5 F/ Y
// Create the list of simulation actions. We put these in- k8 V9 h. I. _# C( [ @
// an action group, because we want these actions to be
& O; L9 m/ E. X // executed in a specific order, but these steps should
; l* v1 c) f& M+ j/ P8 S7 w // take no (simulated) time. The M(foo) means "The message
8 A, O, L; n7 n Q3 I: D // called <foo>". You can send a message To a particular
/ r* c& P3 j2 q# J# f // object, or ForEach object in a collection.; H/ s" ~) _& D/ n( p# H% u$ \4 r
! e$ ~" f+ H8 q1 P* @% x // Note we update the heatspace in two phases: first run0 [3 s% H, b; M" {7 t! S: D: t6 }
// diffusion, then run "updateWorld" to actually enact the! E0 O. z- f7 a! W0 f
// changes the heatbugs have made. The ordering here is" ]2 m( T7 Q& B8 ]
// significant!6 U0 T5 A* k4 I5 g: E, U8 q
; `& C+ d$ R- m' j; z( ?7 Z
// Note also, that with the additional _* K3 L3 y' x: u* Q: |! I! ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! c/ R9 F- v$ m8 k // randomize the order in which the bugs actually run
5 ~% u2 R" W/ d+ ?+ r // their step rule. This has the effect of removing any
" \! Q6 L u: Y$ P! d% H( I" b // systematic bias in the iteration throught the heatbug# Y' K N; {- _% \8 V, R$ C
// list from timestep to timestep4 a! k5 c# e% \* a U" f5 w
( B; z6 }2 W3 f // By default, all `createActionForEach' modelActions have2 {1 G' C1 J4 U) |; Y1 x. y" t* Q
// a default order of `Sequential', which means that the+ d6 f( O/ G0 S& a% n% T( C
// order of iteration through the `heatbugList' will be+ u3 ?9 b: `# e4 }( c$ J
// identical (assuming the list order is not changed
' I' {- z2 t0 H // indirectly by some other process).6 b, m& J% z0 t6 Z( t
3 C! n% ?0 W1 h$ ^& l( T
modelActions = new ActionGroupImpl (getZone ());3 L3 G3 f e1 d! F6 Q
/ \ g% g O8 o+ m/ O: K' B
try {) c0 B6 @7 d: m' x
modelActions.createActionTo$message1 l* C3 v v- V
(heat, new Selector (heat.getClass (), "stepRule", false));
, ]- Y: o( k" v2 b' K } catch (Exception e) {
( Q u0 N1 S9 w* q6 |9 C System.err.println ("Exception stepRule: " + e.getMessage ());. \2 a6 j2 k, A$ j( y* u2 ]# N
}
/ Y/ r, M7 w* |' |$ Q* A0 \- E( w1 `' f/ |: B' t' f" b
try {+ y$ A0 W; j; R) h/ C
Heatbug proto = (Heatbug) heatbugList.get (0);
$ i' M* {1 t- F' o5 a' x$ z Selector sel = 7 A5 q+ M M& S+ ~- D
new Selector (proto.getClass (), "heatbugStep", false);( g7 q/ B: a- d
actionForEach =2 q4 N- ^# f! y' r' u
modelActions.createFActionForEachHomogeneous$call& r+ l: v& X$ Z6 s
(heatbugList,3 {0 X) E& i1 u9 v. E
new FCallImpl (this, proto, sel,0 w5 [ ~: h) H' \- ]+ v' |
new FArgumentsImpl (this, sel)));. I1 r# h, S" U- o
} catch (Exception e) {
) U9 B) {: q* N; ^; L e.printStackTrace (System.err);
p: x( j; w& f2 i1 K7 I6 v }5 y. u4 F! q! \6 J) g5 o0 `8 c
7 l5 n2 ?% h f: B# V1 m$ a* |# w" o syncUpdateOrder ();% N' a2 k T( z) _0 R
. P6 C7 K) @) F
try {8 e+ n& }. d( J, x: |6 Z! t8 B
modelActions.createActionTo$message
, q" L, v, d3 T; F (heat, new Selector (heat.getClass (), "updateLattice", false));
( J' M! N1 I% i+ U; R# r' f* W } catch (Exception e) {0 r. [, |5 C! E- G! {% l* }
System.err.println("Exception updateLattice: " + e.getMessage ());
% Z$ @7 Y" R. w, b4 e! H }. k) M; O6 }+ O* S( E
1 U5 z( B; ]; L9 B* N // Then we create a schedule that executes the- x6 ~7 t1 a* d, z- ~ L3 G7 Z
// modelActions. modelActions is an ActionGroup, by itself it
) F" G; [- f% g- R4 K& n // has no notion of time. In order to have it executed in
/ R3 l5 Q1 {) ~: i8 Q# W4 a // time, we create a Schedule that says to use the* ^8 ^1 U h! [
// modelActions ActionGroup at particular times. This0 }% F5 ]: b. W' P
// schedule has a repeat interval of 1, it will loop every
+ \ O; _1 q) P a& \ Q1 Y // time step. The action is executed at time 0 relative to
6 C8 f8 V' l, o/ M // the beginning of the loop.% V/ J0 J2 z+ C$ T' y' |! b0 H
. X5 F3 ~* n, o# ^# H
// This is a simple schedule, with only one action that is
) |( B6 b* x$ b: a9 M // just repeated every time. See jmousetrap for more% A5 B A8 I- v c( z) U h; e7 B3 A
// complicated schedules.
8 N( f% }2 z# w z) u, f) } 2 T9 Q" `( c1 p/ R( F! _0 z. y
modelSchedule = new ScheduleImpl (getZone (), 1);' s& [; D* E$ ~9 R8 a3 [" s; k; B) E
modelSchedule.at$createAction (0, modelActions);
~" n# |6 t" f1 Q
) r+ i1 x7 [. T) f6 x return this;
( z$ Z. {2 n" u1 m } |