HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- Y) D6 s% h, \0 Z& z* G$ J" n
. ]4 @, u1 I0 h# J: z: ?1 ~) ^ public Object buildActions () {4 ]) D# \' j) Y, u3 n6 M
super.buildActions();) ]+ ]4 G" i+ q- v
( q1 i1 T' F* t) X K0 ]6 R // Create the list of simulation actions. We put these in, t$ p H0 `, m9 a
// an action group, because we want these actions to be Y0 J" G8 }- m, c" Y* h1 k- s
// executed in a specific order, but these steps should
% C5 {& J$ A2 R2 k // take no (simulated) time. The M(foo) means "The message/ a, C9 _7 A6 m- d* M1 y/ d. h/ ]
// called <foo>". You can send a message To a particular2 W h$ s6 u1 B; d* Z0 Q, B
// object, or ForEach object in a collection.
4 v) ]& {* Y; G9 G* O 2 R6 ^4 f& f5 V! W! V
// Note we update the heatspace in two phases: first run
3 T) V, _" c3 v // diffusion, then run "updateWorld" to actually enact the3 S$ r2 u& _0 C
// changes the heatbugs have made. The ordering here is
: {2 |% x) f- V% U // significant!
' C* H6 Z! P8 M9 U
' @' J/ t9 ?+ e6 Z: N$ V // Note also, that with the additional9 x+ P) ]; Y$ I: `! ^# O4 A
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 @4 b6 a, p. f- p
// randomize the order in which the bugs actually run0 |+ \6 i, {$ f& C, T
// their step rule. This has the effect of removing any" `* r$ m P& p! A- ~+ h2 e9 L- S
// systematic bias in the iteration throught the heatbug! y! F5 I9 J, V" ^/ M! T
// list from timestep to timestep; X/ q7 ]8 y4 g2 Y& d$ b6 Q
# M* m/ F+ E- w. L& \4 `! a' `
// By default, all `createActionForEach' modelActions have. D( q( G6 _- i! q3 i! F7 d1 j
// a default order of `Sequential', which means that the
* a( }" {. E2 I. {5 w8 { // order of iteration through the `heatbugList' will be0 ~& y4 G* W" o- S4 b9 K/ C
// identical (assuming the list order is not changed K$ K1 q" l* E' t
// indirectly by some other process).
4 d$ ? V# t! C3 f9 R
, i' }: c: j" y. l modelActions = new ActionGroupImpl (getZone ());
! \; N" @5 X" @2 D5 S# c5 ^, o( O; ]; Z/ u
try { A7 y- ]. S; x$ l- c. Q" g8 }" V* | P
modelActions.createActionTo$message
w# \5 l% s2 a9 U9 i/ @' p% w (heat, new Selector (heat.getClass (), "stepRule", false));# T$ [0 }* D7 y" K4 r
} catch (Exception e) {4 N/ ^/ H" N! C, J9 x
System.err.println ("Exception stepRule: " + e.getMessage ());! w1 L: K. q. Q: w0 X
}
$ @ n1 u$ ^ |' ^
- D4 O% y$ e: l) ?$ T6 [0 v& v try {3 b3 p! H* D9 A( X
Heatbug proto = (Heatbug) heatbugList.get (0);
8 d1 E6 i6 |, b' Q# b9 J# a9 ` Selector sel =
6 d" w+ H1 K0 i% ] new Selector (proto.getClass (), "heatbugStep", false);* K1 ?7 P9 l# B: \
actionForEach =
! e. z* {0 h2 q' r5 q$ d2 _; E' s/ R modelActions.createFActionForEachHomogeneous$call
. k; C) s" G/ f9 W (heatbugList,# J9 l3 o( e8 n# a$ e
new FCallImpl (this, proto, sel,! J9 `: D0 T2 ~* S: w
new FArgumentsImpl (this, sel)));
* v9 u8 b% x1 {" V# ~ } catch (Exception e) {9 m( t) P2 a7 V# K7 f
e.printStackTrace (System.err);
/ c$ F; D2 J" u2 q x: p' ]" C; E }. }( P" |; n5 ]& [7 f
3 r- l5 [- O% E- @1 s2 P
syncUpdateOrder ();
8 b7 I& ]9 V. d' V% b* v/ u1 v/ _" b K7 C
try {
9 ?3 `" R0 J5 O+ M/ S+ t% c modelActions.createActionTo$message ) r6 U1 u* W3 u( L
(heat, new Selector (heat.getClass (), "updateLattice", false));4 _* p, z+ c, m
} catch (Exception e) {: `$ M' m9 a+ ^0 ?5 ^0 R. N
System.err.println("Exception updateLattice: " + e.getMessage ());6 s( u4 V3 c L0 _' i+ p% V# a: e
}* x0 m5 |! N/ B/ _) y9 M
& ^# L: C) r O, f9 Q. @/ K
// Then we create a schedule that executes the3 T* W: _2 v r( t
// modelActions. modelActions is an ActionGroup, by itself it
/ W) }% k4 Q M# F4 W // has no notion of time. In order to have it executed in% l4 M' p! W9 J9 {
// time, we create a Schedule that says to use the
- D6 ?5 I Z3 U( a- ` k! V+ u // modelActions ActionGroup at particular times. This
S) x: Q* T0 m, {. d5 r) r2 R // schedule has a repeat interval of 1, it will loop every/ Q: Z6 o# E' d9 ?- w
// time step. The action is executed at time 0 relative to
: o3 k6 Z' K* ] // the beginning of the loop. @* u4 C5 N: C- T' @
; L: t8 a' }# N' i! Q // This is a simple schedule, with only one action that is
2 H1 n* W% h1 c# K // just repeated every time. See jmousetrap for more
9 v) L6 b$ J, {) { // complicated schedules." {- H2 @8 W9 i" ~9 F8 q
5 p$ R, v: f5 B6 M3 P9 T modelSchedule = new ScheduleImpl (getZone (), 1);
& l4 y2 z2 E: L, t5 }0 E modelSchedule.at$createAction (0, modelActions);# Z6 U# ]8 J4 v2 U& P
3 x, {% \, T9 L5 p5 K! }
return this;
* }% ~0 Q3 E8 r% N } |