HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" t* u S9 a" \- m; g" M, w3 x/ b
- {1 X2 S2 o. v1 r0 V
public Object buildActions () {# z* [/ z# s+ s8 o7 u' K& H6 ^/ d
super.buildActions();, }% w. O0 y0 u6 ^; S' f7 W$ W
& K F& W, W2 y% {
// Create the list of simulation actions. We put these in
/ B" R9 ?' N& _, v H$ A. ^% a // an action group, because we want these actions to be) p3 [- D A& B" c
// executed in a specific order, but these steps should' L/ U5 ~. J9 h( G2 Z: ~
// take no (simulated) time. The M(foo) means "The message
* p2 Z) d- ?( K5 P$ q // called <foo>". You can send a message To a particular
8 K5 i, b R( I3 R3 b0 y* S9 A* u3 a7 m- @ // object, or ForEach object in a collection.
# ?- b1 G# F3 Z4 o( v, I! C7 b
/ n% F' g! g/ f6 B& h) A8 }! P* k // Note we update the heatspace in two phases: first run
' k4 M* U& w7 P; a% H // diffusion, then run "updateWorld" to actually enact the
/ ^- P3 r1 u" ? C // changes the heatbugs have made. The ordering here is& m: N& S/ a, X- I7 ^" K" s9 R
// significant!: h& x$ y( q& H. w4 A
! F t/ q; P w, K* F // Note also, that with the additional
9 ^) P! m" s5 c. T6 B // `randomizeHeatbugUpdateOrder' Boolean flag we can! R. g" a0 E& k6 s& q
// randomize the order in which the bugs actually run
4 F: k4 {+ z7 W2 O2 Z. t' I( | // their step rule. This has the effect of removing any
7 v! |' y* `9 m2 m d- y // systematic bias in the iteration throught the heatbug
9 u. e& N% x+ d) `& o3 x2 |' K // list from timestep to timestep
1 J/ U; ]9 z2 C k2 o
+ E8 f& u% p( ~8 J: s // By default, all `createActionForEach' modelActions have1 p. K, t8 I1 K! @. k
// a default order of `Sequential', which means that the+ q% V5 a: A6 J" N& S( c2 J- n
// order of iteration through the `heatbugList' will be
4 P |% p( y O // identical (assuming the list order is not changed, O4 c, \5 u& [/ ~5 r0 C" j
// indirectly by some other process).
0 h4 ?! z+ |( B& t; l
" w4 k% ~) z) `, s+ C modelActions = new ActionGroupImpl (getZone ());8 R7 d1 O( ^7 F7 X8 L
) q( }6 B, m( c1 P- P3 F$ ?
try {
8 Z: \+ z1 c3 O7 o8 o7 ?* a6 A modelActions.createActionTo$message
/ {- F9 [ a3 p+ f% V" {% V (heat, new Selector (heat.getClass (), "stepRule", false));: b6 O, T$ p8 ?( e6 h
} catch (Exception e) {
2 T; A+ m. M0 P( Z System.err.println ("Exception stepRule: " + e.getMessage ());
8 E$ r! w1 q, v }+ i7 G9 c- N7 Q
2 p0 y0 O( d+ G try {
$ `, _& \* ?; `3 [2 F5 K- ` Heatbug proto = (Heatbug) heatbugList.get (0);
$ ^" t& m4 X+ V3 Q! p Selector sel =
! O4 j4 s$ m+ A, I new Selector (proto.getClass (), "heatbugStep", false);
+ p7 l, H2 T! Z0 C& }; n/ F actionForEach =' S" e0 H! G" n8 f
modelActions.createFActionForEachHomogeneous$call
4 J; T* R+ h0 w6 F" ~/ C (heatbugList,
5 G0 @8 @! L) }# P: @ new FCallImpl (this, proto, sel,
1 p9 P' }/ Q8 {" V9 ] new FArgumentsImpl (this, sel)));
& a0 b7 {3 u' K/ s! F } catch (Exception e) {8 Q/ L `% H3 j! H6 k/ o/ X
e.printStackTrace (System.err);# v: W4 [9 ]. z; t4 @
}$ b w: B" G" I5 M
' F% W" y( I7 \' z( {4 i6 m
syncUpdateOrder ();
/ |+ z. e$ I% ^. c* A7 ^: c' m2 ?7 c: t
try {- t5 Y0 @3 r2 g
modelActions.createActionTo$message
# S( k( E5 l4 V) z/ U (heat, new Selector (heat.getClass (), "updateLattice", false));* p! p* v- k5 J8 }$ }0 Q& E
} catch (Exception e) {0 R. i' Y7 Q3 L
System.err.println("Exception updateLattice: " + e.getMessage ());
5 ~% \; q' a; k1 b }' Q4 n- q( d# V, Z7 I* E
' ]4 j7 N5 v/ Z! ]5 g
// Then we create a schedule that executes the. \! q$ n5 x8 `& I8 z+ z. c4 }* {
// modelActions. modelActions is an ActionGroup, by itself it
* N' |8 C# N7 @/ s // has no notion of time. In order to have it executed in
8 {$ A5 w9 G) K- z // time, we create a Schedule that says to use the- `, M+ ^" C i6 k6 `, w
// modelActions ActionGroup at particular times. This6 S- O9 r& U6 x
// schedule has a repeat interval of 1, it will loop every
/ G' \6 b. Z' I# K1 V // time step. The action is executed at time 0 relative to
" Y+ h. x+ u' k: w8 s // the beginning of the loop.0 y- h0 g5 G0 B* Q5 a5 Y R$ E
. E1 {$ W: J( b- p5 q9 |( W; K // This is a simple schedule, with only one action that is! t5 v( F5 h' Z. H6 h. s* e" a" b
// just repeated every time. See jmousetrap for more" C+ s. E0 b8 y" ]8 H
// complicated schedules.; P/ V3 E, F" X! }( G) \
+ T* `; l0 A: V+ \1 I- i/ I
modelSchedule = new ScheduleImpl (getZone (), 1);; b, m, J+ @7 B( u3 h
modelSchedule.at$createAction (0, modelActions);
" L# w" W- e" l8 V- v
6 J, O9 c: i$ O9 N, Q: K return this;
3 I/ k7 O% a3 U& w1 Z8 E } |