HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, r+ L6 W \8 t
9 L' H: i. T& L+ d3 u# [ public Object buildActions () {% ]9 Z8 `% o, C% Y& I
super.buildActions();
* f: `' |4 v k0 v$ D ( W; m: T) @- x9 `+ b% I
// Create the list of simulation actions. We put these in
x t* n1 J4 P4 \9 c1 k% `; C m9 K // an action group, because we want these actions to be
' w% Z" Z5 h; e, ?3 U: [/ e9 n, Q // executed in a specific order, but these steps should
6 K& r( g* p' K* U3 Z // take no (simulated) time. The M(foo) means "The message/ R5 ~2 x3 a4 X% n4 j7 P
// called <foo>". You can send a message To a particular
! M- q. n" C. U8 B // object, or ForEach object in a collection.
. n! P5 j- c% l $ C/ [( m$ [2 H, T0 k( |" t7 a
// Note we update the heatspace in two phases: first run
9 l# [, ^! u" g T0 E: N) q) \ // diffusion, then run "updateWorld" to actually enact the
7 B1 j/ k8 `4 |' Y1 m/ m; z // changes the heatbugs have made. The ordering here is) t7 q3 Q d' ]
// significant!0 {# Q; `) K8 e ]3 l
. ~" G2 Q% Q6 n# _* C; ^; I
// Note also, that with the additional
2 U! O; }9 T& @* S // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 |+ B% r" B1 v" N0 \$ j( {+ ? // randomize the order in which the bugs actually run8 q; V# N3 N6 O3 _8 c
// their step rule. This has the effect of removing any
' R ]2 i1 x/ F$ D, ^5 V2 u // systematic bias in the iteration throught the heatbug
& G% N/ t# T9 F9 b% ?1 o) R Y // list from timestep to timestep
4 ` F3 ~) H# o' \# y& J& {0 ` S( I
2 i! F0 F6 K' ^ // By default, all `createActionForEach' modelActions have3 ]2 l( C6 y' Z# n& y5 F
// a default order of `Sequential', which means that the6 L' H Z5 J; i- x( L$ \
// order of iteration through the `heatbugList' will be
+ \# J+ A9 {1 S% M0 e // identical (assuming the list order is not changed% v" `4 b' P7 l! H
// indirectly by some other process).
/ |* }6 D- A" ]# g8 I, C ) S( e) P! y- m" @' Q) U( L0 y
modelActions = new ActionGroupImpl (getZone ());7 a! ` I; g$ H
W F# K+ O1 Y6 ^
try {
- U1 z& \" e& g" W modelActions.createActionTo$message( k0 z) X/ w* ~% `
(heat, new Selector (heat.getClass (), "stepRule", false));6 ?6 \& h: D) ^" u( e& v+ k& r
} catch (Exception e) {- U4 ?* a# b- M
System.err.println ("Exception stepRule: " + e.getMessage ());' P1 c/ c7 w$ _
}
, J, W4 g% V- W
7 F8 X6 h/ E& A( |7 Y( H2 W try {4 r6 m' L1 ?3 p }6 K. E
Heatbug proto = (Heatbug) heatbugList.get (0);5 x2 d& A7 ~ p" [$ r
Selector sel =
! z/ \- z: g( s2 ~ \0 C$ b f! L- l new Selector (proto.getClass (), "heatbugStep", false);0 l/ S+ J; u, L0 }. W* A# |3 W, h
actionForEach =
5 Q0 k8 b8 N7 F- Y" ]+ q modelActions.createFActionForEachHomogeneous$call1 i2 s! s9 C, m
(heatbugList,
9 m, `2 \: x% o6 w new FCallImpl (this, proto, sel,+ e* k4 E. E! e0 l
new FArgumentsImpl (this, sel)));/ E* F3 J$ ]4 r+ _$ n3 O' L
} catch (Exception e) {6 {8 e: O9 O* g8 e, ~
e.printStackTrace (System.err);% G$ a" @2 H4 _3 R# V( ^
}) u, j+ U" g6 I7 G1 f
8 S# l# h" Q1 `) }
syncUpdateOrder ();
, k* R+ U* Z3 K* g% {: V. Q8 H6 v8 n! h2 _& D
try {0 ^: R8 Y6 Q# j
modelActions.createActionTo$message
+ O! w3 t' W4 p& m3 D (heat, new Selector (heat.getClass (), "updateLattice", false));
! A' W: P& h0 d$ h6 d) j } catch (Exception e) { H) [" N% w4 z+ k3 R
System.err.println("Exception updateLattice: " + e.getMessage ());6 ]/ E3 _! I4 `% ]4 j; |
}
8 q1 r6 J1 k% n1 }$ T% H R+ E# m& ~ 1 f& d# o) Y4 `; Z
// Then we create a schedule that executes the
5 j, ?. c9 R5 Y: S. e // modelActions. modelActions is an ActionGroup, by itself it. r. V5 l$ B4 I2 V7 x X) P
// has no notion of time. In order to have it executed in& L; D" v$ H/ k. M
// time, we create a Schedule that says to use the
" z+ a! A2 Y' l; g, c, `- [6 i // modelActions ActionGroup at particular times. This
5 l8 V: |6 }; O# P8 j9 V( L // schedule has a repeat interval of 1, it will loop every
4 v+ {( o- P/ [+ X8 I' l8 q1 } // time step. The action is executed at time 0 relative to
( h U% N5 w B" L* _0 H // the beginning of the loop.! u. D5 Q8 t9 R- b
3 F# p* y3 W4 J; D6 s3 h. F // This is a simple schedule, with only one action that is4 {1 f) ~2 V: W( j; Z J
// just repeated every time. See jmousetrap for more
8 J; `. ?4 n" z' B // complicated schedules.
: t8 }0 f% x2 N9 `( v' C: r ( N. E5 f" y+ T
modelSchedule = new ScheduleImpl (getZone (), 1);% Y. `5 ?- [( U( R5 m* n* S
modelSchedule.at$createAction (0, modelActions);
) |( o; [) u g# M0 w* o
- P4 w# L8 r* t' }' z8 t9 m/ F1 z return this;1 g( H2 U, _% I& P$ c+ K' T/ I
} |