HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( p! |0 C. u% }! q% P* {6 V$ Y1 k
# Y- z6 ~; F& S W public Object buildActions () {
+ U3 r+ ?; s5 v7 ~1 } super.buildActions();3 L2 a: p6 c5 s4 x- m
9 _# ~8 w* R; N2 N // Create the list of simulation actions. We put these in
: z! U9 {% l& d/ p8 t& f // an action group, because we want these actions to be
1 c. K# J3 h0 x- ~- \7 s // executed in a specific order, but these steps should, _: [. d* {, v' v h
// take no (simulated) time. The M(foo) means "The message. f5 J8 V g/ o8 h0 R
// called <foo>". You can send a message To a particular
, j; I: P% ]/ Z3 a% X7 n // object, or ForEach object in a collection.6 K, c ?% B- F! b7 S
, i# [5 G4 G9 P9 G // Note we update the heatspace in two phases: first run
. z/ k/ z1 W) W* `/ u7 x // diffusion, then run "updateWorld" to actually enact the
( D6 d+ c4 C B! k+ w // changes the heatbugs have made. The ordering here is
2 a1 E' K n& h# c8 \& a // significant!
: a* q% W* D1 E: ?' m1 T 5 ?- Q* o( J+ Y* O2 {
// Note also, that with the additional
( S6 X0 A! C3 n // `randomizeHeatbugUpdateOrder' Boolean flag we can
* Y4 ]1 X+ d$ y8 R1 v, {5 r! { // randomize the order in which the bugs actually run
1 @7 ~' W) r6 A$ u! ^, H // their step rule. This has the effect of removing any" T7 p5 O1 H$ |& _: c; m3 [! G, P
// systematic bias in the iteration throught the heatbug o6 J0 {8 }: k2 H+ X# R6 f4 l
// list from timestep to timestep
1 O, t! x; Q5 l
/ i# m. B% c( T; S( ~ // By default, all `createActionForEach' modelActions have1 Y7 M& |9 g% S3 `5 ?, ~ M
// a default order of `Sequential', which means that the
* w' l+ I( i' s/ T // order of iteration through the `heatbugList' will be
* d9 z7 j) i) f% f5 b3 ] // identical (assuming the list order is not changed9 B5 i4 S' e- Q0 }. d# T
// indirectly by some other process).) v6 X" p3 H' d& I6 q+ ?$ r
{' D5 l* c! _$ h8 _' F* Q7 y modelActions = new ActionGroupImpl (getZone ());- `& @8 m( y- {) n/ C N( p- F
9 o# R8 _% S$ d- r8 B8 w0 j" X
try {/ g `' G4 K' n% N$ M
modelActions.createActionTo$message' x) x, W z' _5 l6 A6 e0 q
(heat, new Selector (heat.getClass (), "stepRule", false));
# X# [8 L8 o; N0 c% n/ j) q } catch (Exception e) {6 _" k+ a0 X9 d/ X
System.err.println ("Exception stepRule: " + e.getMessage ());
. k4 O- g9 P6 V* s" q }
2 ~: P# f/ ~! j) V" Y) j' s
8 q4 D0 m; a& K0 ~. r- T& P; z try {$ I* h0 o, D) ~, W% w
Heatbug proto = (Heatbug) heatbugList.get (0);) A9 T2 v$ k9 i0 b" p, V
Selector sel =
3 x3 L; k& e' F new Selector (proto.getClass (), "heatbugStep", false);1 O( b6 Q" Y( a# l
actionForEach =4 N( F6 E, K$ p+ P/ m8 M p# k
modelActions.createFActionForEachHomogeneous$call: I* b4 d( F# M! i" W- T" ]
(heatbugList,4 [' Q, H' g7 d K% {
new FCallImpl (this, proto, sel,
7 V. T9 Q/ d" A4 V/ A) U! U6 k new FArgumentsImpl (this, sel)));" y( E0 z. G( P e0 k0 X; I
} catch (Exception e) {" n; s- e j# t, L Z( f
e.printStackTrace (System.err);
. d: P: |" A7 a }2 J) v9 c2 z" i% N3 W e( b
) `0 q/ O X8 Z3 \ g) Y% v syncUpdateOrder ();/ ?1 o1 M7 M8 l" J$ ~2 E& V
3 C1 o6 C! \8 p" f! p6 @, h3 Y
try {3 K( b$ s- u% Z1 r8 G& ^7 |8 j2 k" L
modelActions.createActionTo$message . ~2 V% i- S W- f: L6 r: J
(heat, new Selector (heat.getClass (), "updateLattice", false));- n1 A. G8 H5 w
} catch (Exception e) {8 O& F+ i% G$ z1 Z4 ?4 \! Y; y* s# y
System.err.println("Exception updateLattice: " + e.getMessage ());
* j Y; W9 b& b' T% Q }
; } y# F3 b8 |5 B 0 j) d8 J- r! p) T4 t8 j) D
// Then we create a schedule that executes the' j: X) O+ H( c9 ]% Y6 k
// modelActions. modelActions is an ActionGroup, by itself it+ _0 c; R; T) B1 h Z7 Q
// has no notion of time. In order to have it executed in0 r8 D+ s& ]& P0 ^
// time, we create a Schedule that says to use the% e2 N4 u8 d" j+ J" l5 ~- Y3 n& U
// modelActions ActionGroup at particular times. This; S( \8 y) [8 g+ g& g9 R- T( K
// schedule has a repeat interval of 1, it will loop every
& t) q8 G3 P z" r) c; _ // time step. The action is executed at time 0 relative to
7 J, ~% W' i5 M7 B: d // the beginning of the loop.
. f) | R5 W' h/ f5 f) u6 z- _3 y- {# Y! ]
// This is a simple schedule, with only one action that is, L0 |( u3 r( V0 s2 q
// just repeated every time. See jmousetrap for more2 g) S1 e! b$ H9 m! A
// complicated schedules.! h$ n" P/ G7 |; S$ n+ W
- F- Z& t" U8 K4 U. A$ @% `' b
modelSchedule = new ScheduleImpl (getZone (), 1);
- G- u" z5 N7 x: _ modelSchedule.at$createAction (0, modelActions);% s h$ V2 L. f2 h" s
7 G% T4 T! y$ o4 \3 I7 D" [ return this;2 ~. C4 k" S! d
} |