HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" C: C5 y6 `7 h) K3 ~ d+ L
c& a9 s/ J+ O% z' ?7 t3 @ public Object buildActions () {
. m5 J& f4 O% P( H( E6 s super.buildActions();8 Z. k9 S& [0 z8 S Z, F! s8 r
+ {) U( N: ~+ ^: e- K5 A
// Create the list of simulation actions. We put these in: p( z3 e' _/ Y' r/ n
// an action group, because we want these actions to be, x6 M2 }7 W0 O( s4 d
// executed in a specific order, but these steps should
- [1 M! ~0 w2 {& p: B& v+ X3 z // take no (simulated) time. The M(foo) means "The message' I" w5 l( k2 t, a+ s& u
// called <foo>". You can send a message To a particular8 L5 i( X+ L* g/ y
// object, or ForEach object in a collection.
* y4 |# W) Z( M/ V4 F* t. d' F! T
* r+ F" s- q% R // Note we update the heatspace in two phases: first run" s& [' x e0 N) ?+ m8 r
// diffusion, then run "updateWorld" to actually enact the c" r7 d; ^) ^$ x/ u; M1 l
// changes the heatbugs have made. The ordering here is
; t% F* b% y: d9 d6 D: q5 ]0 f, q // significant!
3 |1 F% C, _, T% F: R; ~7 G
7 q' N$ V- i- u% L3 L o // Note also, that with the additional) [" o( i5 @! S& x u
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ P3 l* U" k- N9 B0 x
// randomize the order in which the bugs actually run
! U1 y" x# q8 q4 ~( U // their step rule. This has the effect of removing any
3 x+ G2 n! O C# ~% F // systematic bias in the iteration throught the heatbug# k) I. y& M9 L3 g6 q, ~0 X0 Z; I
// list from timestep to timestep( t! o+ | g5 @8 z6 M4 _1 k! V) R
$ u2 O# Z Q' }: o2 j
// By default, all `createActionForEach' modelActions have; R) x; ~ _# R# w7 B2 u0 C- i
// a default order of `Sequential', which means that the; \$ N- e- T; p, R$ F
// order of iteration through the `heatbugList' will be5 ?: _3 N; }* j7 m& P
// identical (assuming the list order is not changed L; x3 Y: g/ |6 F; j
// indirectly by some other process).
1 C* U4 ~* K8 E7 f5 |4 K5 Q/ I 2 t& L8 X+ C) a' Z: D' H
modelActions = new ActionGroupImpl (getZone ());& g5 m2 p L! V/ x+ K$ |% j/ U
+ C) d+ P, G( F* {6 B8 y
try {& ^$ u5 y0 J6 f- T6 M0 e$ c5 }) @
modelActions.createActionTo$message U) [: i( }# o3 m, i; Z# n9 m' w
(heat, new Selector (heat.getClass (), "stepRule", false));0 z1 R( Q: L) Z2 \ @" L h' z
} catch (Exception e) {
& r" q, d W& u! Z+ n; { System.err.println ("Exception stepRule: " + e.getMessage ());) L& j4 o* a6 f8 C
}0 i" x; J+ F$ {/ S. D" o; P
$ j" z2 `* P- X9 O3 g m" }! D2 q try {
' O% W0 Q8 o' `; N Heatbug proto = (Heatbug) heatbugList.get (0);
& f. \4 f( i7 q* G4 ^ R9 S Selector sel = 5 _" }% G0 m# b7 c
new Selector (proto.getClass (), "heatbugStep", false);
8 U; a1 z2 F' X. q1 v; k actionForEach =
8 m: j2 q: I5 `, ~ g! X modelActions.createFActionForEachHomogeneous$call
/ X1 |. k& b* d# k (heatbugList,5 Q# U+ i9 M. q" w' C6 _$ a
new FCallImpl (this, proto, sel,2 R* I/ u l+ W+ h; _
new FArgumentsImpl (this, sel)));
4 Q: Z( ~, l5 i" V( K3 N } catch (Exception e) {. F4 y$ \. S* F( Y) s8 s2 J
e.printStackTrace (System.err);
; }3 O( r2 B0 q! f- m& L }5 F+ Q$ u5 e7 O; w; b( ?. B! l
5 M1 I9 P3 ^0 ~6 m8 ]# [" q syncUpdateOrder ();
7 S' C; K- j; a8 |$ ?1 L2 u3 Y: b. [) K( i% M% D/ d
try {
4 v$ |+ i- ]. T6 q# X, |8 O modelActions.createActionTo$message ! B- I7 J6 Q2 i& v; E) G
(heat, new Selector (heat.getClass (), "updateLattice", false));
w: k+ F9 _3 x } catch (Exception e) {
1 O) d* q0 R% M System.err.println("Exception updateLattice: " + e.getMessage ());, c$ t7 z1 p, T; W
}
9 H, P$ Y2 h4 x" i( `, V* [ & `3 M" M0 \; N& ?
// Then we create a schedule that executes the
9 k. ~, E+ s* h: F: Z // modelActions. modelActions is an ActionGroup, by itself it+ m" r% r) d+ ?4 G" X& q
// has no notion of time. In order to have it executed in
, ~: C! j) X v // time, we create a Schedule that says to use the0 w& K/ ^9 @8 W
// modelActions ActionGroup at particular times. This
: b( _, }2 d& J- Q% r3 E. d2 x // schedule has a repeat interval of 1, it will loop every7 |6 ]1 v) a' q i- U; ]" s/ X
// time step. The action is executed at time 0 relative to g" G! r& b1 v) C: V
// the beginning of the loop.# I# z. S9 o R; L1 b: H4 V \3 T: I$ ?
, X! |9 ]8 I4 X: x // This is a simple schedule, with only one action that is, E! Y" r1 H l/ o* u/ `1 Q
// just repeated every time. See jmousetrap for more
( e8 W1 `( c" \. K // complicated schedules.
F' O9 Z, h' x( ]2 N3 B" E
) v+ v8 s/ Z+ E modelSchedule = new ScheduleImpl (getZone (), 1);
' |: T8 N4 X! N/ ]: J$ e, g modelSchedule.at$createAction (0, modelActions);
- `; b; Z" F0 a # A8 {& `% ~/ K) N8 X" D
return this;
0 ~8 e+ ~! o7 [: _" e } |