HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& R3 b% ]' G2 P9 ]' {4 O. L1 F6 T3 P
D- a1 G+ @' i' J: H. j% H4 V! ~
public Object buildActions () {3 f4 v! J4 t7 C/ x f9 K; b
super.buildActions();. S1 e% _8 A. v% L- n+ W
# j' {1 s. `4 s' t4 ~/ {
// Create the list of simulation actions. We put these in
( l, k( Z# V6 x- r# `6 N8 L // an action group, because we want these actions to be4 V$ t) G, T% Q2 C3 O: }2 R
// executed in a specific order, but these steps should& p" M" x& V4 o3 d" P2 _
// take no (simulated) time. The M(foo) means "The message* u% ?+ V8 {0 P& ]
// called <foo>". You can send a message To a particular
* u5 \. l! u. f8 D( o) Z* m // object, or ForEach object in a collection.
8 n1 L1 d5 m6 {1 q9 X: y( a3 o
5 D4 [( ?% }. o" `, x // Note we update the heatspace in two phases: first run
) Z1 m) `7 f0 M // diffusion, then run "updateWorld" to actually enact the* G/ i; B8 n# F' n4 s* q H7 S
// changes the heatbugs have made. The ordering here is
( P2 v8 J Q* o* _# V0 E // significant!
. B ], e; Z+ J& u- b2 K4 J 0 V1 S6 A: `, ^8 e" D0 }3 ]: y
// Note also, that with the additional2 p* L4 o) b5 e) c" b1 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ K4 t" x' K1 {# K0 l; J9 g
// randomize the order in which the bugs actually run
4 i3 q+ r0 k( `+ t // their step rule. This has the effect of removing any
' Y" g, r# K& I* q% {/ C+ }7 d! @ // systematic bias in the iteration throught the heatbug2 `* u; }# C+ N& H
// list from timestep to timestep
G# B0 w: G7 ?1 u4 \
8 \7 c! k" x+ m, v, }! o5 P) ` // By default, all `createActionForEach' modelActions have
- Q& B( s9 a3 B/ R // a default order of `Sequential', which means that the# k/ H3 V( r( y! |! |
// order of iteration through the `heatbugList' will be
/ c9 l/ F( {# g; [ K+ R2 }: m3 U // identical (assuming the list order is not changed
~7 o6 m) U# H7 B, [8 ~ // indirectly by some other process).) u' R; k* Y' y" u6 E) \0 Q# X
0 M2 f2 z/ m* o7 C9 T* W
modelActions = new ActionGroupImpl (getZone ());9 Q* i& J# q5 Y+ F
7 `! u3 l& G) T
try {
- S# W& N0 P' o& ^- } modelActions.createActionTo$message
* G5 X: |* p- q, z/ W# J$ Z) Y (heat, new Selector (heat.getClass (), "stepRule", false));# }5 `1 ^ _, x5 l1 Z
} catch (Exception e) {
# V2 r- S$ r9 U& h System.err.println ("Exception stepRule: " + e.getMessage ());
0 t- ^: z7 ]. ^3 R }
3 }+ B7 }3 n Y# e" v/ C6 k p! E" ~0 d9 q$ P4 L9 O J
try {, R) N4 U" B9 `3 X3 G
Heatbug proto = (Heatbug) heatbugList.get (0);4 L: `3 j2 U# \4 y- \
Selector sel = $ W! }" g% ^6 l4 g# g4 i
new Selector (proto.getClass (), "heatbugStep", false);
0 @) ?% M( u9 N& s& H* d actionForEach =
# K1 D9 Q) T8 J$ g( ^ modelActions.createFActionForEachHomogeneous$call6 P4 P+ N8 A* p1 m" b; L0 S
(heatbugList,
! b- W' D/ G% P: m P" t- d2 h6 z. ` new FCallImpl (this, proto, sel,
: R' S8 ?. A0 ? new FArgumentsImpl (this, sel)));
( _8 z8 @' V7 h8 |& j, y, E, g } catch (Exception e) {, K$ g: H% j6 L+ k8 a
e.printStackTrace (System.err);* u$ a" q% Y( w( t2 t) l
}
# j* J, h- N$ V) |8 A
) O# H8 l9 f. z syncUpdateOrder ();2 y! L4 [5 l$ l/ J' h0 z
+ W8 q$ Y2 l+ r
try {
* I! [( F& \4 Z modelActions.createActionTo$message W4 @+ h' u" H# u
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 {0 Y$ O2 M/ p8 e$ i4 }: u6 C } catch (Exception e) {
/ B, q E+ s% i System.err.println("Exception updateLattice: " + e.getMessage ());# J( a! [# ?! a: q; B5 k* m
}
9 k+ t, J8 y% g: U; g4 P% q+ a2 M9 P : V4 ~" e" f3 \
// Then we create a schedule that executes the6 c% j% I3 M" P# d
// modelActions. modelActions is an ActionGroup, by itself it
% l4 K4 c# T% n% @1 [9 n3 V! {9 u // has no notion of time. In order to have it executed in
' ^$ d4 }8 G" l; u" [3 y1 T$ |+ L // time, we create a Schedule that says to use the! t# R# O- G+ y7 X* a5 |6 q6 Z+ e
// modelActions ActionGroup at particular times. This
9 _5 n% E s* A2 f. ?' z // schedule has a repeat interval of 1, it will loop every
, f# j1 o9 Q: O+ O // time step. The action is executed at time 0 relative to V/ X: E7 P8 t* b
// the beginning of the loop.# A5 ]* w- Q9 K- {
( {# j0 P+ G) i2 c% Q% c* `7 z
// This is a simple schedule, with only one action that is
' n# T. D' S& i- j/ o* h5 P+ V( J // just repeated every time. See jmousetrap for more
1 t2 B0 @& F. ]% v, \. ~) x // complicated schedules.( X7 k4 ~; f) A% w$ G, P% @
7 O7 @, P3 l& O+ e" a1 x* \ modelSchedule = new ScheduleImpl (getZone (), 1);+ B% m. {, g9 L3 \
modelSchedule.at$createAction (0, modelActions);
9 x8 i7 a$ Y3 n `0 `2 S) m
* N. |+ q' K, o. _7 g8 v0 {4 k return this;3 I b1 u; ` |. ?9 L G; y
} |