HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 ~8 a# k$ b- Y. y" u- T; A' m" {5 j8 k' Z
public Object buildActions () {
" H1 i7 h$ f) d$ f2 Z2 } super.buildActions();
; \2 V: M& j- G/ L# N/ X1 ~ 6 ?* e) e1 b; W- O) ]
// Create the list of simulation actions. We put these in+ ]( [; H) y+ p6 u& i7 {5 V
// an action group, because we want these actions to be
# s) i" q3 @& E: T! w E& J3 i) R( s // executed in a specific order, but these steps should( ]' K! i2 E& l0 D
// take no (simulated) time. The M(foo) means "The message
1 i" r5 b0 ?9 h W) ` // called <foo>". You can send a message To a particular2 B$ {9 w; w! q8 P# z- A
// object, or ForEach object in a collection.
, U8 Z/ j5 m8 M" w, L8 x3 c
0 I" \# \1 a4 v# M: j+ |8 K9 Q // Note we update the heatspace in two phases: first run
7 L8 @1 n" o& U+ V; Q // diffusion, then run "updateWorld" to actually enact the
5 K2 O1 Y7 C! u) W // changes the heatbugs have made. The ordering here is
7 V* b7 O1 }+ a3 ?, ^3 M$ e. j // significant!$ |3 m: T: @- F7 S+ ~
; c. c4 T1 z) b& t! @ // Note also, that with the additional
( p/ Y, ?& ~6 s" ], `6 K // `randomizeHeatbugUpdateOrder' Boolean flag we can
) |: M$ ^/ m, V/ `9 {5 b- } // randomize the order in which the bugs actually run D# M' }9 {% x: r6 y# p
// their step rule. This has the effect of removing any
9 f7 I8 _8 s4 O3 J$ S; o // systematic bias in the iteration throught the heatbug4 q: s) ^+ [$ Y, Q; o: X- N! F
// list from timestep to timestep! j0 z7 @% a) d" V8 }
5 t( W, C9 ]; G C3 T9 y // By default, all `createActionForEach' modelActions have! F0 O; V3 x' G$ i: K
// a default order of `Sequential', which means that the7 b2 e- `, v6 v) t
// order of iteration through the `heatbugList' will be2 y" {. Y1 e8 t- @
// identical (assuming the list order is not changed
2 D3 B' j H! { // indirectly by some other process).
' P" A) W7 x! Z3 ` + t& {4 F7 T% d" w+ f2 U/ t3 Z
modelActions = new ActionGroupImpl (getZone ());% d( r9 A7 }# Z
T" Z9 j7 u( y/ n$ H% ~$ m try {- f% X. h t# ]! C/ O
modelActions.createActionTo$message
1 @% b" U" e0 t+ w4 S (heat, new Selector (heat.getClass (), "stepRule", false));1 s" `1 @0 G1 @
} catch (Exception e) { J- P$ J5 Y0 ^/ z. d8 c& m( s$ a
System.err.println ("Exception stepRule: " + e.getMessage ());
8 ?+ ~' q* H6 p# n3 G$ R7 E }
- ?/ U( C1 _# @8 G2 Z5 f2 g# q. A; Y# r, s4 \
try {
# C, V- y! n, N ]# r Heatbug proto = (Heatbug) heatbugList.get (0);, p& }* E$ N& N. \) c
Selector sel =
7 |( w, P' i6 T; [4 N+ Q new Selector (proto.getClass (), "heatbugStep", false);
' t& W# L+ l! l actionForEach =
5 r& M- f' [8 C4 a; w modelActions.createFActionForEachHomogeneous$call
$ [, W" Q# k7 F, B (heatbugList,1 `$ X: [) K& B
new FCallImpl (this, proto, sel,
/ F# d8 \# K7 H9 s new FArgumentsImpl (this, sel)));2 J: M: N* }; ~! A
} catch (Exception e) {- W, L. h2 n9 x. k% V9 m
e.printStackTrace (System.err);
6 O/ H# ~, n3 o% W9 j }' `* H. I8 y5 W) o
8 o' |$ e' C1 N6 n# M4 _ syncUpdateOrder ();( j; i" x. m( D, e: `; N
5 _$ t8 V% `+ Y: Z- _( V
try {
3 A5 Q! {6 b9 l3 o: r |( X modelActions.createActionTo$message , `+ G" O$ ~: q
(heat, new Selector (heat.getClass (), "updateLattice", false));; T4 l0 ?4 D9 s3 ]" G' _
} catch (Exception e) {
2 J; H* E7 L3 F, Z System.err.println("Exception updateLattice: " + e.getMessage ());
. M$ @' m* p2 s, w4 p }; y# Z8 m9 D& A4 k
: q9 R# r' Z, P0 e // Then we create a schedule that executes the
; X! @+ j9 E/ A: `' w // modelActions. modelActions is an ActionGroup, by itself it, B, m* Q! J3 U( N- c0 e# X$ c4 e
// has no notion of time. In order to have it executed in
5 H* X5 X, t9 }4 V* c7 Z$ I' ? // time, we create a Schedule that says to use the
) {% e+ |+ |* Z5 M# j // modelActions ActionGroup at particular times. This$ g$ T2 O! f9 S/ z+ u0 B
// schedule has a repeat interval of 1, it will loop every
0 g! y0 U+ t- a% `( I! r8 s! p4 N // time step. The action is executed at time 0 relative to7 f, i6 p2 c X- t- F8 a7 B8 L
// the beginning of the loop.
% P& z" w( J# ~
* `" }. Y/ _, z // This is a simple schedule, with only one action that is/ [5 o: L+ f: l8 f4 k
// just repeated every time. See jmousetrap for more
2 X7 k5 k1 D6 `, Y$ U6 k7 g // complicated schedules.
' f: |5 R& A: J9 \
7 o% t; I9 V' Y& l modelSchedule = new ScheduleImpl (getZone (), 1);
/ h) ?5 m8 ^8 r# T+ R; w modelSchedule.at$createAction (0, modelActions);
: n3 b2 r! J8 J5 C
0 f" G$ X W% T0 A7 W* t return this;
( q8 c; s! @1 f. P- B } |