HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 l9 S( k6 B4 x
3 q) s& A; B" N) R public Object buildActions () {
1 m) i, ^; G; N) B1 L Y8 V super.buildActions();+ S) O7 s9 f; h/ ?
1 n. K* o4 @$ P$ W* d! r3 P // Create the list of simulation actions. We put these in# w. f) d- h8 u; Q, o* |. Y+ w
// an action group, because we want these actions to be* U* A, m/ T3 U- k' h0 l3 W
// executed in a specific order, but these steps should- v" [( X$ P' j0 N6 {9 P7 j0 d
// take no (simulated) time. The M(foo) means "The message% u( B9 ]# Z* n9 i" Q
// called <foo>". You can send a message To a particular& t% h+ c4 s& c, n: @. t$ p
// object, or ForEach object in a collection.
) W5 X( U1 \9 X# Z& r 9 H. e! D% u- T9 y8 u7 y
// Note we update the heatspace in two phases: first run4 b `1 m0 h, ]& X
// diffusion, then run "updateWorld" to actually enact the" r9 U8 b9 v6 t' J
// changes the heatbugs have made. The ordering here is* y; {4 M, E3 A$ y
// significant!% z' o1 H5 }+ r- s' ?
, B; w/ F. u9 f, y$ Z# i: J
// Note also, that with the additional* r8 I5 t9 e2 C+ f+ P) Z; p
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, F) o' l! o6 `" n% \7 R! Z // randomize the order in which the bugs actually run, j. q0 ~0 K& o& m2 o
// their step rule. This has the effect of removing any
M9 R" v8 Y9 N; r1 T/ E // systematic bias in the iteration throught the heatbug$ Z1 f5 f9 H( d# U( C
// list from timestep to timestep
' d- e+ u5 L0 P: g V" K9 L& I# _+ k% D3 h+ k) c
// By default, all `createActionForEach' modelActions have; f$ u$ c3 j) H# |7 v" G
// a default order of `Sequential', which means that the: H$ n0 e3 G& j5 Z
// order of iteration through the `heatbugList' will be
f$ D& e' N/ C% a, e& ] // identical (assuming the list order is not changed
! S+ j1 I! m4 r" J/ m3 R' E9 j // indirectly by some other process).
7 i' F( a) k1 r; e. z % V! i7 S+ `. O- r
modelActions = new ActionGroupImpl (getZone ());8 W9 s2 X- [0 I6 g
n8 w6 H! x; e2 N, T, ~, M Y
try {5 P- a3 o7 N1 ^2 p$ ~3 A
modelActions.createActionTo$message
3 i5 `3 w- {5 m( h (heat, new Selector (heat.getClass (), "stepRule", false));
& N- d' y( Q6 r% l( E& d8 f } catch (Exception e) {8 t' n7 l3 k+ @2 h# f! @ }. K
System.err.println ("Exception stepRule: " + e.getMessage ());
2 c* |# f3 D- M: s2 {. T }
( h' P2 p7 t! {4 b& }- h# B+ t V v2 p
try {
7 q- t- u6 n' S0 v, K Heatbug proto = (Heatbug) heatbugList.get (0);. J; l' [6 q P; n
Selector sel =
1 Q; O: z k; H& G new Selector (proto.getClass (), "heatbugStep", false);. Z& D' V( A: K
actionForEach =2 N1 A( z4 p) K: Y- P
modelActions.createFActionForEachHomogeneous$call. x+ S0 C1 {5 {$ O
(heatbugList,
* u6 M: C1 W# ]9 o new FCallImpl (this, proto, sel,
, u+ R: S; m. r/ q8 Y, J new FArgumentsImpl (this, sel))); m' Z0 ]$ X1 E6 a4 U2 l$ [6 O
} catch (Exception e) {
/ k5 K0 m5 x( {: e0 `# M4 y; w e.printStackTrace (System.err);2 W! N; b! r% ~2 S
}
t: W: B7 W3 ^$ y5 x % _& ?' u. t9 H8 ?3 G
syncUpdateOrder ();& W' z, P7 r6 _# ]% i9 u
6 l9 G$ V, a3 p. C try {( G1 y7 c0 V1 v4 Y5 m
modelActions.createActionTo$message
% s$ I# P6 a# Y (heat, new Selector (heat.getClass (), "updateLattice", false));6 c+ Q' b8 C: e$ a4 Q
} catch (Exception e) {
% g5 z7 L0 A* C* }$ b# D7 S System.err.println("Exception updateLattice: " + e.getMessage ());( }* l+ Z2 } n: f
}
1 l8 W. `% x* }2 m 3 ]1 s- E( ?$ ?$ T" l2 C3 F4 w
// Then we create a schedule that executes the
+ ~/ X) E5 l! R4 u* H, T // modelActions. modelActions is an ActionGroup, by itself it8 z( W$ S9 e6 o
// has no notion of time. In order to have it executed in* u [$ g" R! J
// time, we create a Schedule that says to use the' u4 t* o2 g# V6 b( X4 U! v
// modelActions ActionGroup at particular times. This
( P6 X" v+ O4 O4 L. u // schedule has a repeat interval of 1, it will loop every
* ^5 G, ?. d- p! i9 { // time step. The action is executed at time 0 relative to
+ I3 e1 t& v% y9 ^7 M8 U. ?' r // the beginning of the loop.2 k% x" _. w- H9 S# L4 A
. W6 J1 M# n) g& ?: U; s // This is a simple schedule, with only one action that is
% \1 ~7 s4 b" w* |& z // just repeated every time. See jmousetrap for more" V3 @- A$ N8 x* Y- Y6 V F. o
// complicated schedules., M1 U, V2 U. x. a0 M( J$ }
% M4 f% j# m5 o* ]0 U6 s modelSchedule = new ScheduleImpl (getZone (), 1);
+ |) d- M8 q- L, `4 l& B modelSchedule.at$createAction (0, modelActions);
! B6 Q2 p4 x- y9 f* n4 Q 4 |8 _8 S2 E2 h
return this;
; o/ k! ?' D/ W2 ^: Q" f } |