HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. W, ~ o( _$ _1 i9 f: c9 Y8 K5 Q+ w
9 S( q# Q) v' H- [/ P( g8 R
public Object buildActions () {% F% _, z2 M" d" O+ N2 [: _7 D
super.buildActions();
, c: t" V) T r1 Q. Z' q }
0 W/ H' I) h4 B' h) g) D P // Create the list of simulation actions. We put these in. o( Y: k, @. k _$ V! U8 L4 z7 r, M% m
// an action group, because we want these actions to be
& q. ~- i7 F* L: G" Q // executed in a specific order, but these steps should9 Q f3 u7 E4 N3 e
// take no (simulated) time. The M(foo) means "The message0 l3 T* h' _1 k3 R$ X5 m9 z
// called <foo>". You can send a message To a particular
# e m' s k# [9 n // object, or ForEach object in a collection.& f# v2 H4 K& J9 _
6 C- b. X! P0 Y0 G8 J8 `# T4 C
// Note we update the heatspace in two phases: first run' v" s0 w1 J- T7 I' }
// diffusion, then run "updateWorld" to actually enact the
$ z4 c' }6 [5 Z. x0 n" _' |: K // changes the heatbugs have made. The ordering here is
. m) H1 Q, k: R' a" T! W: ] // significant!% \1 y# x4 u- m
- m0 g" [" f9 Y4 O! ^
// Note also, that with the additional+ l$ O+ C+ W9 R" F
// `randomizeHeatbugUpdateOrder' Boolean flag we can, U' R& n: ~" W
// randomize the order in which the bugs actually run
2 W: _+ O0 u! Y% \0 i; ^ // their step rule. This has the effect of removing any
, Y: H M2 u* f. j6 D // systematic bias in the iteration throught the heatbug9 U) U, J5 m2 S
// list from timestep to timestep1 e7 B/ g8 l% `; a( I, G
2 Q( ?0 q+ o, @# E1 }
// By default, all `createActionForEach' modelActions have9 g3 S9 ?& c8 D/ r
// a default order of `Sequential', which means that the: R7 j. N: ?0 E5 R" n0 b
// order of iteration through the `heatbugList' will be% U1 u% I1 |( W: c$ L' X
// identical (assuming the list order is not changed
: R2 L2 y, y4 [" J' }( q* P // indirectly by some other process).; _; N6 i: w5 j1 z- s7 k
! W; o6 E# O- P; K. c
modelActions = new ActionGroupImpl (getZone ());% ~+ C, e2 E1 h7 i0 `
: G$ M5 I6 \/ g" Y* [" X! N. s try {
& Y4 C3 n, x4 U modelActions.createActionTo$message+ r; y$ g9 u6 Q0 Z
(heat, new Selector (heat.getClass (), "stepRule", false));: J7 t* O. D6 [7 n$ r
} catch (Exception e) {
' |% B& ^; V' u l. w System.err.println ("Exception stepRule: " + e.getMessage ());
7 V; ] R0 L( r% N0 N: J9 H9 K }- x% V3 m6 O7 I. { R- ~
3 w3 b% k ?7 k! C2 w6 A! _4 S try {
* J0 n8 M5 L- _: J3 w Heatbug proto = (Heatbug) heatbugList.get (0);) f r2 q3 C7 P( D0 z3 B
Selector sel =
, o( Z" q8 ?' O2 g% L new Selector (proto.getClass (), "heatbugStep", false);
- h8 S' \& J& S- H7 U! C8 ]( \! N actionForEach =
3 j1 @& Q0 `! c, O) l G, b modelActions.createFActionForEachHomogeneous$call
- G( H& d6 I/ C- B (heatbugList,
7 b2 {; n% K+ J4 z) G new FCallImpl (this, proto, sel,/ j: `2 y. }% W9 z, A" t
new FArgumentsImpl (this, sel)));
: m2 v9 t1 t8 r+ E. f2 D } catch (Exception e) {
* |9 e8 {. x" y# D8 l8 z8 y4 M8 Q' x e.printStackTrace (System.err);
: y( ~; d4 O, u7 x$ [- ~; ] }
/ L' X% `8 ?; f8 `8 x. q
9 ]/ p4 C9 L7 P+ J; V5 C3 L/ H syncUpdateOrder ();
# j1 n4 L0 E6 ]0 Z; j. d9 S
4 N4 l" P' }0 { @6 n try {
: [* L6 v4 c# ]4 }7 B, ~, K modelActions.createActionTo$message
( ]) ?0 [1 x7 K! r2 } (heat, new Selector (heat.getClass (), "updateLattice", false));' N8 s1 W, m3 Q, z5 k: ^$ g
} catch (Exception e) {( s; W8 n* D+ O
System.err.println("Exception updateLattice: " + e.getMessage ());
8 \1 M0 t& {. B2 f2 [' u }
% [. b8 @5 s# t 8 ~* n0 x5 t/ s3 j# k8 P \
// Then we create a schedule that executes the
' Y! m9 Y7 t o: s% I$ u& [; \3 [ // modelActions. modelActions is an ActionGroup, by itself it
3 B7 { R$ x+ Q" ` ^( G6 O // has no notion of time. In order to have it executed in
. g. A5 w, U8 b+ y // time, we create a Schedule that says to use the, v' F4 x; a1 M2 U& d: S7 C+ m
// modelActions ActionGroup at particular times. This4 E* Z) ?: G2 g
// schedule has a repeat interval of 1, it will loop every& s( h, C5 \3 T& l/ o, s$ D# L, b
// time step. The action is executed at time 0 relative to
, T, O- S# [/ L. w# }% D2 ` // the beginning of the loop.
" g$ X2 Q) k6 e/ M6 v6 L* D; p; i4 d; H6 _: y
// This is a simple schedule, with only one action that is" M& v; @0 E! v, j2 W' |
// just repeated every time. See jmousetrap for more0 l9 F5 h N0 _. F+ e% U1 |
// complicated schedules.0 I( l5 S4 \: Y# o
, n/ }$ D s& ^! J0 a5 B0 a. [
modelSchedule = new ScheduleImpl (getZone (), 1);
3 k" T G! g! @0 B, C1 Y modelSchedule.at$createAction (0, modelActions);, d. @! |- E: _) o# ]0 N, B
m" K2 ^& ?4 ?6 M+ R return this;# x6 v2 h6 w# X0 @/ f2 a( X
} |