HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; j! W) F4 J+ a% `" m
0 _2 d( S8 V n9 y7 H, ? public Object buildActions () {' @+ q1 U6 {. P3 h/ ?1 w
super.buildActions();; Y- @0 Q( ?7 n
% C! ^3 c" o' p5 M7 w9 Z9 q
// Create the list of simulation actions. We put these in5 j0 M6 J0 |) G1 M. ]
// an action group, because we want these actions to be" q3 k# _" [: z- N" B2 S
// executed in a specific order, but these steps should
4 j/ F( ]* Y* ]4 h# _ x p' v // take no (simulated) time. The M(foo) means "The message
( U# a3 }& W0 _' N% m // called <foo>". You can send a message To a particular
4 J2 ] v; ?. S6 t& ^. J- G // object, or ForEach object in a collection.
7 R% S7 q: c: U% o% u% A3 z 5 f0 [# x% }) K% W7 u8 V
// Note we update the heatspace in two phases: first run) t! P6 O9 s1 j% k5 @
// diffusion, then run "updateWorld" to actually enact the
9 G5 A! T4 F6 i // changes the heatbugs have made. The ordering here is3 C" Q4 y) t: o" z d% \
// significant!
5 A/ |& U) y/ n; s
. R2 H; u' d( P& P2 Q( X8 G // Note also, that with the additional* p8 D( q" b: i
// `randomizeHeatbugUpdateOrder' Boolean flag we can x) b' X1 t: m Z. U
// randomize the order in which the bugs actually run
- k' d# K$ N: |4 X // their step rule. This has the effect of removing any
. \. t) a' b% V- z: h% y# s/ _ // systematic bias in the iteration throught the heatbug
% [: j. D+ m5 z/ l3 u( F // list from timestep to timestep
% P" y1 P: }0 T7 k) o: d; @! Q5 T
# p! ~7 S: \* E! B! P; z! e6 }$ ` // By default, all `createActionForEach' modelActions have
, U- p" `: u) a+ e* f8 Y0 w/ t // a default order of `Sequential', which means that the
* r" Q% e: {: S1 @ // order of iteration through the `heatbugList' will be
. d) A: P( l1 T // identical (assuming the list order is not changed
& a, L& `# E6 s. K9 c9 r // indirectly by some other process).2 \+ J$ ~( R( Y9 c& z
$ Y4 ]3 ?" b+ ` x modelActions = new ActionGroupImpl (getZone ());
0 h2 q4 v4 ~& x# V9 E) a+ o9 Y; X5 y; b& |- C$ U
try {
& `; [# {1 k4 D7 j' C modelActions.createActionTo$message
7 A* p$ {( M" D9 {& Z2 U (heat, new Selector (heat.getClass (), "stepRule", false));
. d. f1 \5 w [6 K" c Z } catch (Exception e) {+ G2 _% y l# [) A" G
System.err.println ("Exception stepRule: " + e.getMessage ());: {( t& B+ t; N" k0 D% R1 a2 q
}9 B# g+ O; }; w% b# [1 s
" T& V$ J9 q2 O* k5 G. g5 |+ n! b- p
try {
) h. O, D, b9 k5 l0 q4 n Heatbug proto = (Heatbug) heatbugList.get (0);2 s" f1 U/ D8 b5 b s+ z3 @
Selector sel =
$ Z J; t# ]" F3 j0 f* ]+ a$ | new Selector (proto.getClass (), "heatbugStep", false);
, J5 U' v* T- v' l+ _ actionForEach =
5 W: n F. @$ l! K3 @7 O modelActions.createFActionForEachHomogeneous$call
1 n6 u, j4 f2 z' ] S (heatbugList,
+ o+ L3 N" T) G2 U# ^ new FCallImpl (this, proto, sel,: `5 H. \* X2 |" W2 {& Q: K; D
new FArgumentsImpl (this, sel)));
% `; K; u k* i* g } catch (Exception e) {7 n& m4 k6 ~& t' u8 E
e.printStackTrace (System.err);
6 p& \7 e( g$ H }# N% m1 z. ~; N. R
. p5 t# J, f3 k3 i0 t! g8 Z syncUpdateOrder ();! f( W! \/ l" N; ^* O1 f
/ X# B( g& W7 c( h7 P6 ?- I& R
try {; y) o6 i, J, i6 U2 q1 g+ q+ ?
modelActions.createActionTo$message ; a! _! r V, N6 l' y( b; V
(heat, new Selector (heat.getClass (), "updateLattice", false));! g8 h$ Q/ E0 M" ?+ X+ P. o
} catch (Exception e) {
6 Z7 {" M1 h! j! {, p; f7 ^ System.err.println("Exception updateLattice: " + e.getMessage ());( o. t6 O. p! k2 y& V: X9 ~
}
3 g% F* t$ C. D9 G' e2 S; Y- i" A2 W . Z6 P9 L. q/ h" C: J, W
// Then we create a schedule that executes the$ E1 Z [3 h9 F7 \9 |+ c6 [8 H4 `
// modelActions. modelActions is an ActionGroup, by itself it
# `) H) J- a3 P' P; w // has no notion of time. In order to have it executed in% H$ N4 R! _5 \. U3 {
// time, we create a Schedule that says to use the# j# I# o' K6 \- \3 _! ?
// modelActions ActionGroup at particular times. This
" J6 P$ y2 C% F // schedule has a repeat interval of 1, it will loop every8 r1 [4 W& d4 c, c" M5 m
// time step. The action is executed at time 0 relative to
3 _ u+ c% d. X6 j6 e // the beginning of the loop.
6 N. M4 `8 U( j" w" w$ |" V# ~) z8 g
// This is a simple schedule, with only one action that is: Z( o: D" X# b4 a5 |. b; G6 e
// just repeated every time. See jmousetrap for more
: K* B# A1 u. H // complicated schedules.- b9 B# K% U9 n. g. Z/ R9 c
1 J1 C- p! W6 c! }% F+ ? v modelSchedule = new ScheduleImpl (getZone (), 1);: ]* j4 V6 h6 h3 B
modelSchedule.at$createAction (0, modelActions);4 Z- }/ z4 ~: E
6 m3 g& b0 e5 ^4 e" a0 `; s) X
return this;# e( b q, o0 G- s5 a
} |