HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 x% H" E$ d4 R: z2 w2 E9 [. K* ]% {
public Object buildActions () {
" f) y; E; [6 Q) `) x super.buildActions();+ K* Z% M! f/ h c3 y+ p$ O
2 y3 W8 F9 `1 F8 |8 x0 p3 n# W // Create the list of simulation actions. We put these in6 g% x$ V1 _% a0 r
// an action group, because we want these actions to be
y7 F8 A" ?9 d- M$ K& Q- ] // executed in a specific order, but these steps should" I0 k0 |* M' U
// take no (simulated) time. The M(foo) means "The message5 l8 L0 S, f7 J
// called <foo>". You can send a message To a particular
- y& T1 Z5 A0 H% Z2 t+ Y // object, or ForEach object in a collection.
' I4 p8 L2 z- q$ {! m7 M , i0 T8 Z7 c2 y& H) i9 c
// Note we update the heatspace in two phases: first run
: I4 b) d) F, \+ u // diffusion, then run "updateWorld" to actually enact the& [5 t; K/ G& ]2 O9 r+ i; T
// changes the heatbugs have made. The ordering here is
) s9 Y$ O( }9 Z# I& M // significant!
9 Q R5 A7 d' I7 s+ l$ T9 X
8 }3 H' u( @) ] l! x; M. J/ v // Note also, that with the additional1 i: e) W3 B0 }% t( ?* _" t
// `randomizeHeatbugUpdateOrder' Boolean flag we can% T5 D* a C' Q8 U
// randomize the order in which the bugs actually run
# ?( Q9 J$ \$ v0 S1 S) c* u X: M // their step rule. This has the effect of removing any! k3 _! j/ k- l
// systematic bias in the iteration throught the heatbug6 I: W% _( o5 K8 y/ A' O
// list from timestep to timestep% k/ Y) }4 a: Z0 V i
9 z& |. i8 G4 a; D0 _ // By default, all `createActionForEach' modelActions have! M0 T/ a, G2 g! |! d
// a default order of `Sequential', which means that the
! h) D+ t& O* W+ a& J // order of iteration through the `heatbugList' will be
: _: p* d5 q: L // identical (assuming the list order is not changed
. }/ |6 t. }3 H4 A& ?: c // indirectly by some other process).
# C! Q! B H$ [
9 h0 w0 o# w. _& q& e! N* x* B modelActions = new ActionGroupImpl (getZone ());& ]# `' H8 i D" D, M9 Z
6 Z' m9 i; r: f) h: s try {; X! j( ^) O$ k9 w% N, R; O
modelActions.createActionTo$message
4 T9 A1 \, A+ }" A8 o (heat, new Selector (heat.getClass (), "stepRule", false));
- W' O( Z; H0 k( z" z2 \& F$ T& Y } catch (Exception e) {
! z, g2 X9 o+ _9 H( t# p9 B% h System.err.println ("Exception stepRule: " + e.getMessage ());
) \9 V% Q& |# r- Z. B }0 u) e9 Y; r/ P5 _; g1 A) q2 A5 T. F
6 X0 v) |" w. A7 ]5 L. J" n9 _& y- z
try {& N! ~- V0 v8 \) X* c
Heatbug proto = (Heatbug) heatbugList.get (0);
& o- |/ C. x; m4 R Selector sel =
4 i- i t* v6 w# x) H new Selector (proto.getClass (), "heatbugStep", false);
! F+ B& Q4 t+ R; i$ R. v( N actionForEach =
3 h" S) f! @# {% F3 F. f modelActions.createFActionForEachHomogeneous$call
* s1 ?9 l/ W$ b: t' L0 v$ p (heatbugList,
A% }$ j3 @/ k5 X new FCallImpl (this, proto, sel,
" G& h0 O# _+ {: |# M; i L+ A6 Q new FArgumentsImpl (this, sel)));
* K' S% m3 Z' S- D/ z8 B9 W- U# g } catch (Exception e) {
+ J8 D: Z9 F4 {& B0 s9 b! ? e.printStackTrace (System.err);
: d# z6 l: x! ]0 b }1 X2 {. F8 M3 ^" \& C4 ~
3 V' B. f: F& @4 [: `- g syncUpdateOrder ();5 S3 q# X+ p7 H
. ]. ?( t/ E( z2 a- e
try {8 r( S) `* C. k$ C& Z
modelActions.createActionTo$message
& r# N; i4 R% L5 [1 E (heat, new Selector (heat.getClass (), "updateLattice", false));& d: L$ U& i. Z& M
} catch (Exception e) {0 m0 b( z+ Q; Z7 o' v
System.err.println("Exception updateLattice: " + e.getMessage ());
; w2 u% `1 W5 g* N4 G: D$ ~ }
9 w6 Z- Y) z) t6 r 1 Y2 _) M* O! w/ \6 ]
// Then we create a schedule that executes the8 X+ r, |6 w( X4 e5 k9 t
// modelActions. modelActions is an ActionGroup, by itself it
+ Z; b: H6 M8 ^4 k; i // has no notion of time. In order to have it executed in
, w ?$ Y6 Z9 D1 S4 d2 { // time, we create a Schedule that says to use the
6 E* l, s/ \% v+ k, ?* f- @ // modelActions ActionGroup at particular times. This
' J x+ j) r! d: K // schedule has a repeat interval of 1, it will loop every
3 Y0 `. [; N% f d, e$ } // time step. The action is executed at time 0 relative to$ [$ m; c. U/ [# k; U
// the beginning of the loop.
: ^" B# ^/ {" k6 a0 Y p; E* p) O7 m; h/ H% q0 G; h
// This is a simple schedule, with only one action that is" [, n7 g3 G( ~) N4 [
// just repeated every time. See jmousetrap for more
\" j. X, Z+ t6 d3 D- J( w // complicated schedules.; }/ ?6 s9 c/ t" p9 h- s i
: y; ~/ ^: I7 p5 }& | modelSchedule = new ScheduleImpl (getZone (), 1);6 ^0 G; n M% J4 N2 D
modelSchedule.at$createAction (0, modelActions);
8 X% j# K3 U7 m2 e! t" Y
( N' W; I/ `& f, H; z3 d* B return this;- L( c, B! }- ]; v( v/ W+ ?4 C
} |