HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# k) M5 S& b" j/ W- W
3 |$ V" B5 O: p) l2 d! s$ `
public Object buildActions () {
& ^9 d1 }, V. U# @6 \# U V super.buildActions();
. H, L4 M" K8 p, S% v - s* \6 A; S7 ` ~# f
// Create the list of simulation actions. We put these in/ n) [( }4 |) z4 k+ G1 W' D( q
// an action group, because we want these actions to be
( k) a6 N$ w/ W. v5 ~+ K7 j/ @, L& q // executed in a specific order, but these steps should3 D# X% u" l' X# \2 a! o
// take no (simulated) time. The M(foo) means "The message
. U1 L% I& E' l. ?! ~ // called <foo>". You can send a message To a particular( V& N0 n1 j. O
// object, or ForEach object in a collection.
" F( M' v* S/ c7 a4 H) G, @& a, o+ N 9 P$ w3 U7 M) A+ V
// Note we update the heatspace in two phases: first run
! ]( q" e* E- X1 C! R // diffusion, then run "updateWorld" to actually enact the
9 R- @/ `) b8 g! n0 K; m9 C. { // changes the heatbugs have made. The ordering here is2 T" ~ ~" C4 c
// significant!' ?2 g' v' S/ P7 k2 n
% R5 c" G- _6 `- H) o
// Note also, that with the additional9 l1 x8 i/ i) [# ?. [
// `randomizeHeatbugUpdateOrder' Boolean flag we can! } y6 r0 A2 t1 Q R! u, }- J
// randomize the order in which the bugs actually run
7 R- V& Z" R; Z _ // their step rule. This has the effect of removing any
- v4 C& n5 Q7 L2 a1 y // systematic bias in the iteration throught the heatbug
+ j0 M* J+ T( c4 d // list from timestep to timestep
3 B F O# A8 }0 ` ( B; E/ X) [7 d, l& }* K
// By default, all `createActionForEach' modelActions have+ [" e$ b- X7 \, u5 [, n
// a default order of `Sequential', which means that the# Z; X |9 A, d- |/ f6 g
// order of iteration through the `heatbugList' will be7 W+ S+ n T* o% U' K2 K8 H4 `2 B# {5 g
// identical (assuming the list order is not changed7 L7 C. }# E" {7 @/ p @! U
// indirectly by some other process).$ c' y5 S0 ^% G; G: `$ q
8 p6 C4 o, {5 r1 q& _# O modelActions = new ActionGroupImpl (getZone ());
8 g* Z6 ?& S" w, i2 Z& R
) P7 R1 T; Q) `! s* R% N! p# ^ try {/ Z. q& u, o: m$ S1 S0 M5 p3 N
modelActions.createActionTo$message2 Y" D' u9 R$ r8 N. G( w
(heat, new Selector (heat.getClass (), "stepRule", false));( K" S; Y+ L) `9 K& E1 E
} catch (Exception e) {
! B1 a6 P Z5 I1 W8 D7 D9 U2 w7 M System.err.println ("Exception stepRule: " + e.getMessage ());
4 a: c- M& D+ S9 d2 G8 o }* O( u) C1 D, h! C. b- y2 Z+ p5 B' i
, n4 Y2 u8 P' v try {6 x" w1 A0 }* q; B y- Z) m
Heatbug proto = (Heatbug) heatbugList.get (0);
7 ]# g9 O0 {9 ^. o5 R Selector sel = T) U# V1 H5 H. h# v- b( g2 V
new Selector (proto.getClass (), "heatbugStep", false);
% Y* w, R! t0 H! `1 F2 @ actionForEach =
# X' D, ^# d' C# X4 _0 r modelActions.createFActionForEachHomogeneous$call
" @) b a. m! p |# w$ I6 B (heatbugList,
" {8 W9 D! O; }- Z9 Y/ t new FCallImpl (this, proto, sel,* M* k" E( e, D2 s5 s
new FArgumentsImpl (this, sel)));
2 \# p! v o, |% F h: Q- j } catch (Exception e) {- I! @5 t$ S2 v. @# ?9 }+ n
e.printStackTrace (System.err);! ~$ I' F$ A2 X% U, i6 \
}
7 U$ F7 p6 a( I* @ . }9 v b% k0 J9 I4 f
syncUpdateOrder ();
2 [2 H/ c k" R- O8 r8 h
8 L% R6 T/ {7 a$ B$ d( P" X try {
# \& q1 w0 U- o modelActions.createActionTo$message p9 m' m( W5 \ r1 N% [
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 |. ?' ]. Y' f0 @0 J, ^ } catch (Exception e) {
9 w) Z7 y% ]1 t$ f3 A System.err.println("Exception updateLattice: " + e.getMessage ());( {" {, E( S- e3 ~7 D" X4 I
}
8 J+ c" L) G% K( n+ y2 K4 x& r ! ~* g3 c8 p7 V2 P6 T
// Then we create a schedule that executes the
6 R! V B8 n% l // modelActions. modelActions is an ActionGroup, by itself it
/ |, v" ~4 {( x1 O // has no notion of time. In order to have it executed in# O- E" c2 i4 V8 Z5 y
// time, we create a Schedule that says to use the5 s* t; I1 r E) {4 F2 l' U8 ?
// modelActions ActionGroup at particular times. This2 Q# v! V- X3 S5 H6 D
// schedule has a repeat interval of 1, it will loop every, F5 W) t$ r: g. n' R
// time step. The action is executed at time 0 relative to- y, @9 C l. l
// the beginning of the loop./ y! Y3 B6 v- P7 G/ y2 L
- r# L- j! D7 _, R0 u4 I // This is a simple schedule, with only one action that is7 U1 t3 }/ C! G1 E
// just repeated every time. See jmousetrap for more( `1 O6 n' |+ ^; v
// complicated schedules.
( [2 \3 E2 C; \. I ; o, j+ {& i4 @$ V
modelSchedule = new ScheduleImpl (getZone (), 1);
& C5 L4 |4 I$ Z$ N6 o modelSchedule.at$createAction (0, modelActions);
" P- Q% `% j# ~9 S; A! G ' W; A; o" V5 q2 |
return this;; T$ @$ Z/ n1 `( l
} |