HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( f7 o. E7 c% T; l4 u7 l3 c& N
# P& \$ g0 v' T) P# k3 C public Object buildActions () {
6 b6 O; M5 V, _( U super.buildActions();
$ S3 A4 `) F. R7 i . K2 j0 o2 m T+ ~
// Create the list of simulation actions. We put these in
: T j, i0 b g/ d& s0 d9 m& ?! P // an action group, because we want these actions to be! b3 G M; \3 @+ O
// executed in a specific order, but these steps should
. A) X; q/ I0 _; T0 V: U& O0 b0 Q // take no (simulated) time. The M(foo) means "The message, r7 e) {4 E. Y: t' B
// called <foo>". You can send a message To a particular
* f) [: E; I8 N" a // object, or ForEach object in a collection.
: S! y; }8 @& D$ e# \! K2 J* y 0 }& j: ~3 M$ u
// Note we update the heatspace in two phases: first run" p& H) ]' |( u. g% C
// diffusion, then run "updateWorld" to actually enact the, F& ]# i& K" j
// changes the heatbugs have made. The ordering here is4 O; p& C# {3 Z1 d( ^; s
// significant!
- Z6 c7 F) b4 n5 W* J! @6 L , b# c: R6 R1 r3 H$ o& @- d
// Note also, that with the additional9 k, j) g, b; h3 g6 K+ J9 z
// `randomizeHeatbugUpdateOrder' Boolean flag we can- _6 e* y6 J! Q
// randomize the order in which the bugs actually run
5 }' l3 j# v; y/ ]' |, v7 x // their step rule. This has the effect of removing any% M; a( B+ [) s' t/ m0 k
// systematic bias in the iteration throught the heatbug
% W8 x/ U3 w4 Y+ t3 U // list from timestep to timestep0 K4 t5 h# L1 p
: Q+ j1 G0 e1 y2 E2 C* _6 N! P
// By default, all `createActionForEach' modelActions have
& n b: n) }. u // a default order of `Sequential', which means that the
" ^6 w' X( _6 \2 {$ E* s+ h // order of iteration through the `heatbugList' will be2 g" q B; b1 {5 Z4 K, {( F2 Y& @
// identical (assuming the list order is not changed/ B3 \4 i! I5 ^
// indirectly by some other process).6 m* X4 Q" ^, I3 T, V. C, d4 I6 C
) ?5 c: C6 G, W* g* X' W modelActions = new ActionGroupImpl (getZone ());
: p; f$ C% t9 V6 a" }' Y* t$ e0 z
) R7 U7 k0 ^0 a0 | try {
E3 A' x4 L' V" ~3 i5 A& g0 _ modelActions.createActionTo$message
3 t, d9 M9 M+ ^3 R. s (heat, new Selector (heat.getClass (), "stepRule", false));6 {9 Y9 F% h4 U: j! Y, a6 ]
} catch (Exception e) {. j6 [, k4 T) E& m6 X9 P
System.err.println ("Exception stepRule: " + e.getMessage ());
' }2 z! C" K! } }
9 Q( u4 ^3 G4 `7 x& W
+ z8 E3 r+ d4 u! {5 G try {# {; @; T6 E$ {3 P/ p) x* B
Heatbug proto = (Heatbug) heatbugList.get (0);
- q" N: d7 S8 N Selector sel = 2 t( n6 {: T) X9 z1 t% Q z: m
new Selector (proto.getClass (), "heatbugStep", false);
! ?' l2 \( y5 d# i# H actionForEach =
5 H+ _, |5 v) ?7 w" p: l0 F. Q modelActions.createFActionForEachHomogeneous$call+ ^* t3 ?1 p$ D
(heatbugList,
# n0 D1 _: I0 X new FCallImpl (this, proto, sel,
" @) U6 b0 L* q0 t6 k8 V( O2 {+ P9 A new FArgumentsImpl (this, sel)));
4 R% k2 ?* i9 o' ^6 ^ } catch (Exception e) {: Q/ z5 X& D" e
e.printStackTrace (System.err);2 E" o- `3 q0 I1 g9 I: i1 R
}
% q* R6 l: A" d/ }2 K& g, O
+ P: \+ N! K( O7 _- [0 P3 }% T" o syncUpdateOrder ();
9 E7 [% _8 D7 U# l7 S; ^6 @* g9 R' |. I' a8 z! D3 K; W% y4 T
try {
* y( l4 r$ U+ w" D& Q& @ modelActions.createActionTo$message 2 F5 w1 K! ?9 n2 }' u m
(heat, new Selector (heat.getClass (), "updateLattice", false));" Q/ f3 J9 x& x
} catch (Exception e) {
) O* `# g. u! K8 r6 W, k) Q System.err.println("Exception updateLattice: " + e.getMessage ());
: h% q/ U" z7 n- B } g W2 S0 a+ T2 s: `' t/ Y
+ |. [9 E& H2 v( M) R // Then we create a schedule that executes the
1 ]3 g* ]. t0 i' ^- T" | D4 l- b1 X // modelActions. modelActions is an ActionGroup, by itself it3 f" `$ K& B+ V4 s2 Y
// has no notion of time. In order to have it executed in- S n/ o& g* [6 ]( q3 y
// time, we create a Schedule that says to use the
/ G- U3 I7 \- P8 S! M- G+ m2 A // modelActions ActionGroup at particular times. This9 ~2 A# F+ k& u6 l% V: D# x% {
// schedule has a repeat interval of 1, it will loop every! ^# U8 I6 t" K: A
// time step. The action is executed at time 0 relative to
* i1 q' C5 ?+ m$ p F // the beginning of the loop. c: R) F0 C1 H5 o7 h. C
. B0 q z3 t6 r4 U7 ?7 y5 Q% | // This is a simple schedule, with only one action that is
. L$ [$ `( g7 {/ `8 y" ~ // just repeated every time. See jmousetrap for more
# z) u! P$ f; ` O, Y- A/ D/ D' L // complicated schedules.
1 o# M: c4 n: G6 B' t
7 @( F: K6 U! a) \ modelSchedule = new ScheduleImpl (getZone (), 1);$ c7 ?. Z3 Y5 c
modelSchedule.at$createAction (0, modelActions);/ I+ Y* _ G- M7 M" o
, X& K m6 [" F" V# `4 [) x return this;9 V: W. r* W, _! Z' L0 o+ \
} |