HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' j9 _+ O6 ]$ _
0 }0 k1 ?$ O! s" v( F6 O/ k public Object buildActions () {6 P; t5 O9 O; o$ C8 |) r
super.buildActions();1 X3 @# N9 E8 p. ~+ N
) Q" L0 K' \- }9 ~1 z* Y; S) _
// Create the list of simulation actions. We put these in5 y/ b3 H, a9 U6 I# _+ {" L
// an action group, because we want these actions to be
1 f+ V' W3 {' ?& _7 M! b% y // executed in a specific order, but these steps should
% o4 n' J. N: d' Z' I // take no (simulated) time. The M(foo) means "The message9 l7 |3 e7 m7 N! @5 U& v+ R8 x4 H6 A
// called <foo>". You can send a message To a particular
8 D6 |2 t& K4 K& l/ J // object, or ForEach object in a collection.3 s! v/ D# A. y3 I
/ [4 @! {! [- G, f7 C2 M, {0 k
// Note we update the heatspace in two phases: first run, t9 n% _2 G9 V5 P
// diffusion, then run "updateWorld" to actually enact the; Y7 s* c+ o( j2 ?
// changes the heatbugs have made. The ordering here is
2 \# _" m( _" { f' c, y0 u // significant!
7 W8 U, L/ m( S2 D
' `! a( [; R* k, [ s+ s8 [ // Note also, that with the additional% h- i) h# Y$ K( N7 e3 Z7 @" W: M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( x6 g3 S! O6 y0 w. [# t // randomize the order in which the bugs actually run' `' L$ H6 ~$ a$ j: i4 v8 M; }
// their step rule. This has the effect of removing any3 L4 m) G$ C3 o. B8 I1 i
// systematic bias in the iteration throught the heatbug3 u( P' z$ G/ Z( X* v9 W
// list from timestep to timestep+ @, Q9 O2 z, a7 N1 @+ q" L' {
9 R1 Z+ p5 \" e. V // By default, all `createActionForEach' modelActions have
" A- R4 ~) f5 t) `9 g // a default order of `Sequential', which means that the
: |& G, |3 G, @5 \ // order of iteration through the `heatbugList' will be
7 ^. y" n4 ]# c. z5 P! b! i // identical (assuming the list order is not changed
2 i2 K7 u6 Z( k$ `5 o, Y4 U // indirectly by some other process).
; P0 u& C" t# c3 e: N; I
. D* @8 m1 m0 O5 m modelActions = new ActionGroupImpl (getZone ());' I8 I% `+ Z9 m* \
7 _0 P6 Z5 I# k
try {6 Z% [* t; ^5 R) Y+ y4 i
modelActions.createActionTo$message1 l: J! X$ o5 R
(heat, new Selector (heat.getClass (), "stepRule", false));
, @& N( t- q, L5 b Y, t# U } catch (Exception e) {
" \) c5 A3 ~" p# a4 o System.err.println ("Exception stepRule: " + e.getMessage ());
& l7 f; b) |7 }) P1 P }% O0 U+ y/ d9 i" p# {( K
+ ^6 r; P" T6 G
try {
- g* [. @% k7 o4 B; [4 } Heatbug proto = (Heatbug) heatbugList.get (0);
/ w+ T9 C1 R3 Y+ M1 ~: m Selector sel = 2 f) S/ D, I" ? }
new Selector (proto.getClass (), "heatbugStep", false);7 Z8 }! X. J9 C! t8 V4 q9 E
actionForEach =$ h# B0 z) k: P( C& r8 X' C
modelActions.createFActionForEachHomogeneous$call
8 v' a! t( M0 }3 D& ~ (heatbugList,
( a9 f2 F I0 P" T& m; I0 _. c new FCallImpl (this, proto, sel, M, O8 j# O9 ~, M1 K5 r: }# r. l; U
new FArgumentsImpl (this, sel)));! w( p( T& ]2 Y; _) \2 U; y
} catch (Exception e) {
" E# Y4 e u6 g, p, }8 R3 H, F e.printStackTrace (System.err);
+ f$ N) z# l, m( H" X9 O }
! h4 J2 e' D0 w5 {$ U + i f; k1 M; `- H
syncUpdateOrder ();
4 l" X: S: g) g( j4 O( h* A
$ Z! f/ \3 A9 C, ]. x try {- V2 |% j- i4 y
modelActions.createActionTo$message 4 J% _8 X, {+ a& s4 I M& Y
(heat, new Selector (heat.getClass (), "updateLattice", false));1 m$ D1 u" z, }3 u8 S" Y- t$ S/ P
} catch (Exception e) {$ z; n* V: `! h9 ~0 o8 L
System.err.println("Exception updateLattice: " + e.getMessage ());
9 p; i3 y; \" i. f% g/ z }
5 l7 I. J* n- b0 o2 P2 b
& R/ [5 {3 d" ]7 x* S' o // Then we create a schedule that executes the
9 O; _! A7 o1 k4 g- c) z% {2 c6 {% z // modelActions. modelActions is an ActionGroup, by itself it( _5 ~3 p! O8 C
// has no notion of time. In order to have it executed in
1 |' j( G3 {1 B5 I' E // time, we create a Schedule that says to use the% Z' }2 ]7 ^7 T: ^! P
// modelActions ActionGroup at particular times. This
; `( \9 P7 @- w3 x$ ~ // schedule has a repeat interval of 1, it will loop every9 }4 g7 n9 d" n
// time step. The action is executed at time 0 relative to
8 ]2 h7 k' t9 b5 @# o! o+ x // the beginning of the loop.! ^6 r3 C0 j3 o
* T3 W. ` R% {/ ?0 y& }- }3 Y4 d# ^
// This is a simple schedule, with only one action that is$ E4 i9 u0 Z7 S) P
// just repeated every time. See jmousetrap for more
+ p' ?* l9 _+ t5 Z+ S0 F8 v // complicated schedules.
) P' c* M" L6 [2 N5 w4 _% H 9 b' ?, t/ s8 R0 I7 Z) a
modelSchedule = new ScheduleImpl (getZone (), 1);! }4 R" P h5 S- e
modelSchedule.at$createAction (0, modelActions);6 u3 t2 W6 \2 g% Y! I1 E! x
% N6 ]5 x5 G5 _
return this;: \0 v0 o U* P0 G; k
} |