HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( _1 Z) B9 N; @0 h3 h
: N& z: Q1 N( ]" X* E& F0 b public Object buildActions () {
5 p6 s9 P; ?' g1 S. ?4 y3 U super.buildActions();- G% m2 `8 m- W- K; w
, Q: T( q7 [/ I9 ~ w# O // Create the list of simulation actions. We put these in
/ d& o- C H7 W; {( v // an action group, because we want these actions to be
( P9 d$ J/ [+ x u // executed in a specific order, but these steps should
& c* R7 Y3 {# C // take no (simulated) time. The M(foo) means "The message
7 T" {: T5 l- P' A5 [0 m // called <foo>". You can send a message To a particular- Q9 I3 j" ?$ }, Q
// object, or ForEach object in a collection.1 c& c! J5 |7 I6 {# q; T
6 r# y* p4 L/ F
// Note we update the heatspace in two phases: first run
v7 g* F/ ` o+ r // diffusion, then run "updateWorld" to actually enact the
: @# g% `/ |5 F" C8 I3 s# h; ~ // changes the heatbugs have made. The ordering here is1 b* ` F! t6 i! ~& A
// significant!
$ p. l& l0 q3 d- V
: R8 u9 b; L" ~4 x. U // Note also, that with the additional( Z; A3 S) c8 G8 |% F) m8 O0 y* N0 V
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 G H9 ]3 o5 ~3 [* h
// randomize the order in which the bugs actually run
& V6 C& Q1 Q* }" K // their step rule. This has the effect of removing any
! S1 P% a& ?! |* L: Y // systematic bias in the iteration throught the heatbug. q# W+ X0 |+ L; \; a Z
// list from timestep to timestep
& H; n9 R0 ~ r; i4 ? $ G/ A1 o3 v+ {% u7 v& O
// By default, all `createActionForEach' modelActions have; r# A7 O& |$ o; k8 z
// a default order of `Sequential', which means that the
' J$ t0 r1 f! Y3 @ // order of iteration through the `heatbugList' will be
1 c2 K8 Y& X) l: B // identical (assuming the list order is not changed
# R2 {6 e0 U7 {6 i1 u0 d* i" i7 u' D // indirectly by some other process).* @8 Y- J# I3 H4 ?6 @$ P
! l, Y1 G0 n: Y/ T1 E modelActions = new ActionGroupImpl (getZone ());
J( L% R" u. q! i0 H
$ F' l3 L- S/ @8 @; m try {0 H* }& ~1 J6 X& o' V' ~* h
modelActions.createActionTo$message% c) z- I4 D' i' j
(heat, new Selector (heat.getClass (), "stepRule", false));* y) v+ w' U( l8 H' X( R' B
} catch (Exception e) {
7 e/ Y8 I) P8 E) |( H! P System.err.println ("Exception stepRule: " + e.getMessage ());
6 u7 C0 r# n7 S4 ^* p$ C }& t% g& L7 U; x0 `* V7 U; R
! w Z7 B: Z( E+ X: T% H try {
" w; o5 w3 k: T' @' f- e9 J+ C Heatbug proto = (Heatbug) heatbugList.get (0);
0 K& V6 ]9 l2 J/ M Selector sel = 8 ~8 a2 c3 A' L: c
new Selector (proto.getClass (), "heatbugStep", false);
1 J" J, [# [! ?. }# R k actionForEach =
, x' H( V% P1 X' o$ J' Y modelActions.createFActionForEachHomogeneous$call
' W* m+ X1 Z L; M" f | (heatbugList,( D' P2 Q( z, ~! R" |" e; B
new FCallImpl (this, proto, sel,
. n: m# E. J: l/ _+ `1 z; c new FArgumentsImpl (this, sel)));
* |8 j7 H7 n5 }+ l# ^+ a5 \ } catch (Exception e) {: W' F1 [5 @1 B5 g3 a4 d
e.printStackTrace (System.err);/ ? Y, X o6 n! |; u
}
# Y& v% l1 D% M# h5 ~* D# o
# e8 W3 c' l' A4 V0 P6 k syncUpdateOrder ();
$ C$ o) o/ \+ z+ y
% ]0 n4 w$ i1 n5 ~. J try {
! {1 N1 W" u% {8 K( \& w modelActions.createActionTo$message
- m$ d7 [, ?2 f (heat, new Selector (heat.getClass (), "updateLattice", false));* x+ K6 I% W5 b
} catch (Exception e) {
5 \! ?# P1 u% b( w System.err.println("Exception updateLattice: " + e.getMessage ());, t$ n/ o) B, \$ n
}, ?! r& I" D9 ]/ E0 c
' g* z+ h+ H" _8 Q // Then we create a schedule that executes the
6 y* x6 G, h% ~3 d. r$ U // modelActions. modelActions is an ActionGroup, by itself it% O& g& c5 o1 A4 r8 \
// has no notion of time. In order to have it executed in: p2 r2 S- z: r% h% a: _8 z
// time, we create a Schedule that says to use the
$ w( p: U" z9 X) t/ _, Z // modelActions ActionGroup at particular times. This
1 C( A7 e' M$ K // schedule has a repeat interval of 1, it will loop every
" X: n m7 T7 N( E* H* S" i // time step. The action is executed at time 0 relative to
: T0 K8 F) J! l // the beginning of the loop.
4 c" h0 L- B! m5 B+ k. {' { u z% l$ i! R' }1 }
// This is a simple schedule, with only one action that is
/ w) x( n7 t9 C1 @ // just repeated every time. See jmousetrap for more+ U% }1 C' |. M, A
// complicated schedules.! T3 l! J! ?+ H& z
5 z8 O3 l3 I* L) f# @
modelSchedule = new ScheduleImpl (getZone (), 1);& k. H6 P. R" `( k' G3 M p
modelSchedule.at$createAction (0, modelActions);. z( Y$ W) U& R0 n
% g( I4 W% d& W# Q8 Y3 z) v' R" H* b
return this; N* o4 W- [& L2 b" m
} |