HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# u5 `6 J5 Y: Q8 e
% M0 E0 a: X! r' z6 \ public Object buildActions () {# S/ b& W& V! D( a
super.buildActions();
% r& w; ~% b+ |
1 v& F4 [3 v K3 X; C // Create the list of simulation actions. We put these in; Z5 t2 c5 c1 B9 ]
// an action group, because we want these actions to be
" J* ]3 A: I/ g5 I" n, T' A9 k0 [ // executed in a specific order, but these steps should
7 @5 f3 }' ?& |7 s // take no (simulated) time. The M(foo) means "The message; b7 v6 E% X3 X5 z5 D7 H8 p/ S
// called <foo>". You can send a message To a particular
. }& C- i) ~: Q* \; [5 L. K // object, or ForEach object in a collection.+ m% d4 v# O% w# J1 T. f" I! m
) z5 M8 k" r8 _ m, K // Note we update the heatspace in two phases: first run
* f1 e B9 a' a7 c& m* Z, n // diffusion, then run "updateWorld" to actually enact the5 o2 s/ N- s, t# Y
// changes the heatbugs have made. The ordering here is
' {3 [4 S" p$ D, B; t; J$ z // significant!+ g* Q4 U; ^/ `/ i3 ?
, ~2 O8 O1 t8 C3 @4 z6 i: ` // Note also, that with the additional- V7 P; B A8 f7 z$ t1 F$ t2 A1 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 \& T, S( @% R! x$ ]! }5 ]
// randomize the order in which the bugs actually run
5 e5 C+ O* S8 f8 }& R$ h // their step rule. This has the effect of removing any
O2 R1 a- Z8 N3 ~% h3 N // systematic bias in the iteration throught the heatbug$ g4 ^; f4 u( ^: f7 q
// list from timestep to timestep
% y% O% O+ X& `. r2 K$ J" v
3 X) T% G0 D" T* L // By default, all `createActionForEach' modelActions have) Q8 a. V4 T- [
// a default order of `Sequential', which means that the3 u. x" @ { X, o8 Y! V3 Y
// order of iteration through the `heatbugList' will be) A& D' S! m; R; L
// identical (assuming the list order is not changed0 ]8 q3 }5 N) w0 M
// indirectly by some other process).. v4 H" V; @- O/ x% R
: [+ E4 h4 w) E: Q
modelActions = new ActionGroupImpl (getZone ());
% x4 F. h" m5 ]$ @% M. {" l5 \9 j. w
1 ?$ _" Q7 N; K/ p' w7 F try {- M4 I$ q5 |8 g9 E! S
modelActions.createActionTo$message
& \4 g' u* d/ v% g H4 w (heat, new Selector (heat.getClass (), "stepRule", false));
8 G. H; @" a, x4 ] } catch (Exception e) {
! c% B, K8 p2 I" F7 F5 c- z+ m System.err.println ("Exception stepRule: " + e.getMessage ());
9 O/ \- i( ^$ B$ C/ M) [ }
* u2 u+ _1 Y3 W2 l7 _* n: P& U: N; p3 |( W$ J* Z2 \
try {
3 m, W. G! c7 N; x& | Heatbug proto = (Heatbug) heatbugList.get (0);. }4 c, U. y! [6 Z3 N, Y
Selector sel = $ G { x H. [" B6 K, s% N/ i8 x
new Selector (proto.getClass (), "heatbugStep", false);3 ]2 h& F7 r# g3 f6 K4 k1 b* {, v
actionForEach =
" e4 A, F/ f3 t) F/ b' f* Q" x modelActions.createFActionForEachHomogeneous$call
/ |: b; F3 b( p! R" o" k (heatbugList,6 V6 S, j' ~' O+ h3 y5 [9 \
new FCallImpl (this, proto, sel,
5 B& N: |5 Y' `( ~5 }" _ new FArgumentsImpl (this, sel)));
6 v3 I; G# F: l3 K4 J } catch (Exception e) {5 b2 n. G8 M' \
e.printStackTrace (System.err);% K" [* R. G& ~" K& A
}' t" E6 y4 u' }/ ]% W2 w8 c( {
. d2 n3 L4 |/ y" _ syncUpdateOrder ();* Y* f- C, }" w: a# J
) X* L% p$ i& }9 M/ n
try {
9 o- J4 J% Y4 R& h6 ^7 j modelActions.createActionTo$message
* ]4 e2 g- p, v# o* P7 k3 | (heat, new Selector (heat.getClass (), "updateLattice", false));
8 \& Y/ _" j% @ } catch (Exception e) {
5 k$ H1 S! h8 D0 D# Z6 \ System.err.println("Exception updateLattice: " + e.getMessage ());" B$ z ?' G y) y$ O. X
}, A; D& X" e% I
7 Q* F1 [0 p! R
// Then we create a schedule that executes the% |2 S8 e J& A) [; k8 ~
// modelActions. modelActions is an ActionGroup, by itself it
0 k" k9 E+ c% o // has no notion of time. In order to have it executed in
0 \, j& d0 ?/ w6 }( ]. }* |: e/ n% E // time, we create a Schedule that says to use the
) l9 B# G2 k# U // modelActions ActionGroup at particular times. This
0 c' m c$ Z- }2 K1 O: w+ X2 z8 l // schedule has a repeat interval of 1, it will loop every
" [5 A) ]& \) M; w2 M& p/ Q // time step. The action is executed at time 0 relative to' ]! Q/ T8 j9 C0 N
// the beginning of the loop.# q, s( g4 `- I" q- R! V* ~
* T* J; G2 d( Y- S& p) P // This is a simple schedule, with only one action that is
, y9 a9 T2 z4 k7 t3 X- P% S# S8 a // just repeated every time. See jmousetrap for more
`* ?$ F3 W2 `* u# f$ T# C3 I // complicated schedules.. W8 k* C' B: J2 I: J7 p# X8 \6 C
; x+ v* X* x, I8 B& ?- Y, f modelSchedule = new ScheduleImpl (getZone (), 1);
- E7 i L" ?8 z" M7 ~ modelSchedule.at$createAction (0, modelActions);# T" w, I$ _% a# n8 d3 \" ^8 b
0 y N6 n F% V0 j5 u5 ~" ^! r return this;: m& E( M4 `2 {' j
} |