HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: T& Z- } F" A! I; B: C
/ \6 j5 c- ^5 C3 B9 s. e: O$ q7 T0 O& ? public Object buildActions () {
" w9 m" n; H5 I0 W F super.buildActions();
1 O% C; t$ t8 T; N, {
* Q( R+ P+ v/ _+ Q+ K( [! n // Create the list of simulation actions. We put these in
" h/ Z8 a: t" v // an action group, because we want these actions to be) g0 M# E% M; p- e: k
// executed in a specific order, but these steps should
: v# c! h$ w+ ?: U1 m // take no (simulated) time. The M(foo) means "The message
/ C' r5 z1 `/ G% k3 C4 y // called <foo>". You can send a message To a particular
2 c3 ^* U5 d! P# f! M: |7 P/ N) r // object, or ForEach object in a collection.3 V7 ~% d7 o8 y. p% A" K& e" o# e
: h5 p5 A% q6 Y. `* `
// Note we update the heatspace in two phases: first run
. }) P8 t$ e5 W. W% k // diffusion, then run "updateWorld" to actually enact the0 } |% G5 F, i, b' c& O* p' w( M
// changes the heatbugs have made. The ordering here is
. {8 x6 Q0 k' a6 v // significant!" y- v( K; G- S+ y& `
# Z7 {. `; a/ q
// Note also, that with the additional9 W* N/ s% z% t: S" L$ D& P* M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ \, i) E% m1 i) A) n) U K // randomize the order in which the bugs actually run
& @$ Q( V" B7 U // their step rule. This has the effect of removing any
' O) T) I- I1 J4 u) @& s) T // systematic bias in the iteration throught the heatbug8 L; D }. Q2 c5 T5 r5 e1 y# \
// list from timestep to timestep
- |% g- x1 M, h: ^ 4 W# ~" v7 I, w; e- t
// By default, all `createActionForEach' modelActions have9 j8 c5 S! M+ Q2 ~! X
// a default order of `Sequential', which means that the# t' ^0 r1 ]9 p+ i2 w2 d2 ]
// order of iteration through the `heatbugList' will be* d( |! N/ C$ r
// identical (assuming the list order is not changed
" z3 G& |! f8 x9 j+ O' e! A6 O // indirectly by some other process).% U0 G3 F9 x! s# T2 y; C* j
. z5 j, t! ?3 b/ Y. b- A; { modelActions = new ActionGroupImpl (getZone ());! }/ x5 {4 \/ y w% {3 g# W" R
& ]# s# S* q6 m2 @8 O
try {
2 k$ R8 Y) Q6 z2 D+ F modelActions.createActionTo$message
9 D( g4 _! e+ W' I5 i# b (heat, new Selector (heat.getClass (), "stepRule", false));
$ }& Q: s# k! B" k- Y } catch (Exception e) {
2 M0 X t3 ?) O' f7 i+ q System.err.println ("Exception stepRule: " + e.getMessage ());( D* ~6 L1 m4 C! a; C' I
}) h! @3 d+ i9 O. ?2 G1 U
0 l! \2 ~8 k/ J0 I0 D
try {7 B1 g$ U3 e# d! H
Heatbug proto = (Heatbug) heatbugList.get (0);
' }; T5 l! A" V" v& |& B' d Selector sel =
9 n, y/ k' Y5 N& }3 B; t new Selector (proto.getClass (), "heatbugStep", false);0 e+ \" F& y9 ^% ?- A0 o
actionForEach =& }8 p% U+ ?# e$ R+ {% T( I& N' Z
modelActions.createFActionForEachHomogeneous$call; |6 G; b; K# i/ F- U) M) g. C& M
(heatbugList,- L3 g' y- G" D
new FCallImpl (this, proto, sel,
1 }+ R, G$ d9 P9 ~7 o& M1 R, \/ W* O new FArgumentsImpl (this, sel)));% k% P$ W0 D' i' b# U& k5 b
} catch (Exception e) {; I0 Y1 t v9 |# Y% ^& p l, P
e.printStackTrace (System.err);$ e( G/ M% o: v
}
' \2 e6 m# Y% z- Y* q% G
: A- E- H- |2 T* j, j6 `* Q syncUpdateOrder ();# z* G; U/ N. K' f+ b$ R1 M
& k2 J7 @, Y5 H# [ try {
7 S- e9 q& E: l' E4 s modelActions.createActionTo$message
# j: n) `! v+ u3 ]! x8 Z (heat, new Selector (heat.getClass (), "updateLattice", false));( m7 U* p9 {3 o$ V3 t& c" u" W0 J
} catch (Exception e) {
* p3 L* j e, B0 r System.err.println("Exception updateLattice: " + e.getMessage ());0 u7 q3 A; B! ^" r
}) N1 w2 p- U0 ~& t9 Q
! h1 ^7 x" L/ g+ @3 }% K* e3 D // Then we create a schedule that executes the5 @3 i% [% t% w% }2 V: `
// modelActions. modelActions is an ActionGroup, by itself it/ E; B9 |' y! x3 l5 ~) ` N8 R' d- A
// has no notion of time. In order to have it executed in- f" O* m& b& a7 [- K* r
// time, we create a Schedule that says to use the0 \* W& D: `7 c$ p- [
// modelActions ActionGroup at particular times. This" P! t( c& u+ Z
// schedule has a repeat interval of 1, it will loop every9 b8 @2 f: v2 E* F: }
// time step. The action is executed at time 0 relative to
, d! x# N% E4 R5 `8 ^ // the beginning of the loop.! i; j3 K* r0 O( }! p
- S9 I+ J/ K: h0 r // This is a simple schedule, with only one action that is5 U: n( f# u9 _; b! d$ [% z
// just repeated every time. See jmousetrap for more/ F: Z, F3 x% |5 S
// complicated schedules.
7 c2 Z4 P8 s( V
; S' n# l1 X5 g/ P$ _6 K modelSchedule = new ScheduleImpl (getZone (), 1);
+ O2 U |: G! N& d# B9 E* r9 A8 ]/ ^ modelSchedule.at$createAction (0, modelActions);
9 r: }, R/ J9 n, _* ? G ! o. ~$ }- S% h. `
return this;3 W; v8 g# `& U3 E0 f
} |