HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, X5 j. C% y1 b5 l2 S
E0 S. t7 Z) T; y; j3 u( I public Object buildActions () {
5 V# E$ } p# B# x5 d super.buildActions();$ W5 Q+ ?2 Z( X& H- y4 a
( T( n5 B) D- x$ E3 l5 {, |) _
// Create the list of simulation actions. We put these in- R& P5 V1 U) N/ }% \
// an action group, because we want these actions to be* A8 X) I' q1 K. G
// executed in a specific order, but these steps should; c, _4 _# v) U. w% C+ t
// take no (simulated) time. The M(foo) means "The message% ]* t1 j/ b! q( g$ ~9 }
// called <foo>". You can send a message To a particular
2 m# Y/ {' S& W/ i2 K+ q$ R // object, or ForEach object in a collection.4 L h2 s3 v0 c7 D' i
( ^$ J2 o; ]- B" A( e$ \' F9 V7 S
// Note we update the heatspace in two phases: first run
' S" t! a& W5 ^# F$ ~ // diffusion, then run "updateWorld" to actually enact the
, ^# @+ b1 C$ m# [5 K. k+ w( P // changes the heatbugs have made. The ordering here is
! G' e9 D' S. Q8 u' S6 n/ U7 w // significant!; B4 k& Y, |; N6 y5 r5 L1 L2 b" u
& i' k; G4 [2 X5 g& [5 [& k // Note also, that with the additional
' z2 g2 Y+ O2 G4 ^ Q! T: e // `randomizeHeatbugUpdateOrder' Boolean flag we can( C6 |* p A6 Q$ }. M, U9 y
// randomize the order in which the bugs actually run4 T$ J/ a. M4 @% k
// their step rule. This has the effect of removing any% u+ N5 ]" i. X! x0 Q3 q% k: Z
// systematic bias in the iteration throught the heatbug$ w2 q# ^! w- _0 }2 A( L, _
// list from timestep to timestep0 [ H/ F) p% u# `7 W
, \' K; z+ w) ` // By default, all `createActionForEach' modelActions have
4 f9 S- |7 _3 Q4 o) I" N // a default order of `Sequential', which means that the$ B1 R1 Q3 Q: s; z) E
// order of iteration through the `heatbugList' will be$ Q8 h( v9 j! f, P# o- P6 e5 d
// identical (assuming the list order is not changed
0 U& f; N. R* e // indirectly by some other process).
! Z! d( ?0 h7 ~+ } * {6 E1 |4 I: K) m
modelActions = new ActionGroupImpl (getZone ());
2 ?# ?* Q% r, Z% \3 M, `; o, x3 X; ^6 l: |4 I5 s4 w
try {3 W8 c" w. M9 o% B, e
modelActions.createActionTo$message9 Z. t ^9 N; i2 J: @/ _
(heat, new Selector (heat.getClass (), "stepRule", false));9 q3 n& Y, A- A; r+ V) m
} catch (Exception e) {
: T- H) y5 Y, ]1 Z System.err.println ("Exception stepRule: " + e.getMessage ());& l/ y5 _/ l2 b; ?1 E8 h
}
7 V' S) w+ a- U9 g1 W3 R0 k: i' |4 R3 K! s j9 p ^9 t3 O
try {0 p0 t3 W! A/ D! F. V! d
Heatbug proto = (Heatbug) heatbugList.get (0);
3 v* |( a' J7 z4 S Selector sel = & [6 S8 n* y6 h2 i9 H
new Selector (proto.getClass (), "heatbugStep", false);# ~3 `* l# I1 ~: J8 U9 H
actionForEach =
1 `7 S# v* C: _: Y, B: z! k modelActions.createFActionForEachHomogeneous$call* ~# ?& X6 S2 `: r' F
(heatbugList,5 x1 y* {+ K8 {1 `0 |0 R
new FCallImpl (this, proto, sel,
, a: u1 b/ P3 @4 L2 s7 c new FArgumentsImpl (this, sel)));
8 G8 m3 T7 ~, X* N; @ } catch (Exception e) {
; w. q2 U5 b8 @# g0 \5 w2 w e.printStackTrace (System.err);
, J$ @6 s" m0 L# Q$ |/ y }
. c" e) d/ e4 t8 j: @ u " |7 s* v. ^9 K
syncUpdateOrder ();
\' O3 c) U' B7 U" R# h; t. m+ v5 b# b# Y8 R1 Q& \
try {1 |' ?# \8 O" r" K J& F
modelActions.createActionTo$message
" ~/ _: o( h7 K; y0 _: { (heat, new Selector (heat.getClass (), "updateLattice", false));) ~4 s4 {/ Z0 F- x; e% n2 d8 h
} catch (Exception e) {( X" f& C. z! ~: `' [, ^" U3 K
System.err.println("Exception updateLattice: " + e.getMessage ());
: Z4 y5 q0 J7 L. R }% E( Z6 O8 O, h! G& o3 Q. C
7 Y v3 r3 ~4 v8 g // Then we create a schedule that executes the
- I2 m5 Q7 Z0 i/ W* K // modelActions. modelActions is an ActionGroup, by itself it3 ?7 R! e+ b: C9 O4 _
// has no notion of time. In order to have it executed in" f4 }; x% U# @! m5 {
// time, we create a Schedule that says to use the
5 V; ]- m% e* F // modelActions ActionGroup at particular times. This
- O( l% ^1 Y" K9 j5 W+ g0 r$ A // schedule has a repeat interval of 1, it will loop every
, C, a( I* `7 M7 A // time step. The action is executed at time 0 relative to
+ g. W- C% O8 {! d6 g- U s; x& S1 g: O // the beginning of the loop.7 E+ K6 ^% \1 A7 Y) ^* c
+ F0 ~# c. ], w0 `) `3 \5 C
// This is a simple schedule, with only one action that is5 m6 M1 y0 r' L0 K3 j
// just repeated every time. See jmousetrap for more
4 a8 N1 E$ O6 a, J: y U0 C // complicated schedules.
@1 m( Y2 H- \% v( \) b
$ o- f5 ^5 G/ F& ~ modelSchedule = new ScheduleImpl (getZone (), 1);# ~5 p: a5 C; o$ B% {
modelSchedule.at$createAction (0, modelActions);
$ n! [7 b, r, K; S3 K) x, H
$ f0 Z1 r) D- a( d return this;
+ ^4 \8 |/ u: _, Z5 f' Y1 @. T } |