HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. x5 N' f+ r# N7 d) G) x
: j# l" Z: p; J# E, X3 d public Object buildActions () {5 N+ a& F- a7 I2 q1 B( F
super.buildActions();
6 R" p- e& {& \- u9 A2 T ' M; D) _/ B) w- o- D3 Z# W% F e+ X
// Create the list of simulation actions. We put these in. y! H* K: L9 ?! g
// an action group, because we want these actions to be
' H. r Z, V6 E' d: [5 a // executed in a specific order, but these steps should
5 \9 h3 X$ ~+ A: m0 w$ M // take no (simulated) time. The M(foo) means "The message5 X" A% o7 ^& U9 J* m( P: G
// called <foo>". You can send a message To a particular0 n |' U% @8 B2 |
// object, or ForEach object in a collection.' i; _/ a% [$ y4 t# C
% P2 q; O2 n& \" e- S // Note we update the heatspace in two phases: first run
h9 Q- K/ R* F1 Z2 h* ^1 t // diffusion, then run "updateWorld" to actually enact the
0 g" p" x4 J e+ T* O1 g // changes the heatbugs have made. The ordering here is
) h; m2 s9 p/ O( \% s // significant!
( g$ h( D' L8 t) i& @) }" ~8 U! P & g+ D1 l' l( m- {6 R S
// Note also, that with the additional
* i# f) Z% ] N5 m // `randomizeHeatbugUpdateOrder' Boolean flag we can( b7 V# z, x9 l S+ Y# X. P
// randomize the order in which the bugs actually run
$ g2 T! i) p; O9 i // their step rule. This has the effect of removing any
; f, J w) j) s3 H/ ~' D/ ~ // systematic bias in the iteration throught the heatbug
! X% u% [% d$ x3 c e7 H! ]& F l // list from timestep to timestep
8 U3 \% B e; l; y$ f" p 1 e0 ~2 a5 R/ Q
// By default, all `createActionForEach' modelActions have5 d3 [, x/ Z* x0 V
// a default order of `Sequential', which means that the
+ _4 p( ?1 B J* R& a6 x // order of iteration through the `heatbugList' will be
8 A$ g, g, W9 E' ^! M/ V // identical (assuming the list order is not changed- }( P) {) A S9 U( A* j
// indirectly by some other process).( v M% }- \$ z+ G
% X* q% r. v- b6 H7 E! b' M
modelActions = new ActionGroupImpl (getZone ());
; I. V/ A, D$ b6 e7 d7 s' Z# i* x* p
try {
. I5 Q7 J7 |: Z; m, Y* H! ~; v modelActions.createActionTo$message
- O0 c) t. f) C. ?5 u% o/ H. Z9 f (heat, new Selector (heat.getClass (), "stepRule", false));
, ]6 C0 _0 a( W7 L% G* {1 F } catch (Exception e) {
7 p5 c6 @& v* k4 h System.err.println ("Exception stepRule: " + e.getMessage ());
& A) L' E. s! ~* c) Y7 T L }
) A5 G( S3 J' d _- i6 \
& z$ D) N" r. ?" T4 H m: p try {8 a( ]' @% l& p( j$ N0 ?7 b7 \5 h" @
Heatbug proto = (Heatbug) heatbugList.get (0);
/ G Y+ g/ B9 [- ?0 X5 ?! X Selector sel =
$ K2 ?9 J6 O# _1 A0 ^0 b O" s new Selector (proto.getClass (), "heatbugStep", false);
: C, i# f0 ^" ]5 E; A T actionForEach =9 _( ?1 [4 g/ o' R
modelActions.createFActionForEachHomogeneous$call
% [$ w t& y @! N8 B7 g& c (heatbugList,
- Z# @) S, |# D7 J new FCallImpl (this, proto, sel,
/ k: r+ ]" i' P" H8 U new FArgumentsImpl (this, sel)));: d8 y9 I+ [0 _4 }3 U+ C7 c6 G& L
} catch (Exception e) {# `8 T' a' V+ N, H/ b0 b$ f! ]# T
e.printStackTrace (System.err);" K h. W% H2 p1 W. O- ~; t, C
}
7 t- L" Q5 H0 D, \% l; T9 J ' q4 C0 S6 N) S: F2 m
syncUpdateOrder ();( z3 f# |( s* x' _
, X; m, m% r! r0 I
try {7 ]# a" u* }- o; j
modelActions.createActionTo$message + m' H4 w( b7 f# A+ n2 u3 a, f
(heat, new Selector (heat.getClass (), "updateLattice", false));3 i+ @3 d2 A- o5 k) w3 v
} catch (Exception e) {2 x9 R3 a0 V$ o% B) x
System.err.println("Exception updateLattice: " + e.getMessage ());
9 R1 e7 l9 o: S( [ }1 B+ E: c2 |& O
' L9 O0 q5 }7 s j% c/ Z. T% B // Then we create a schedule that executes the, x9 V V2 v+ Y0 G# u+ y ]6 Q5 O. X; v
// modelActions. modelActions is an ActionGroup, by itself it
, B3 h3 e" D% y" U$ a/ u // has no notion of time. In order to have it executed in
& l/ E' e& O8 z // time, we create a Schedule that says to use the
. u% ~& b/ Q0 \% ]1 `* i6 W // modelActions ActionGroup at particular times. This
2 i4 Y% X7 q5 O& a4 }. W // schedule has a repeat interval of 1, it will loop every
8 e7 e4 a, f3 w0 L- M // time step. The action is executed at time 0 relative to4 g" X7 t A9 G& S
// the beginning of the loop.
9 _& N8 s/ q1 Q6 n( L. H$ w
: z0 f, Y& S' t [( H( Q* |/ _ // This is a simple schedule, with only one action that is2 [& U: z' ], x: T* H
// just repeated every time. See jmousetrap for more
. N6 y6 g: V8 q# ~ // complicated schedules.
7 c/ `( ]2 i$ [2 m$ ^
3 E6 ~/ Y) i2 h* j# S modelSchedule = new ScheduleImpl (getZone (), 1);1 _8 ^& _, W( V# `
modelSchedule.at$createAction (0, modelActions);: I1 a9 a5 Y8 @
8 F) h2 p" b7 E) h# X7 [ w
return this;
9 v7 x9 ^. k7 m/ | } |