HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 I3 D3 w! F' b" d& V
8 n0 A* D& ?' f0 k" s* I public Object buildActions () {& d( e: | a( Z$ j+ i
super.buildActions();& |% d' V# Y3 ^" l% I. T
& A9 n) _ x- V% H
// Create the list of simulation actions. We put these in
9 c/ b. c V: C8 ~( B) Q' U' y6 L/ S$ F t // an action group, because we want these actions to be8 u1 X8 h+ K/ J
// executed in a specific order, but these steps should
4 k# v( v9 F7 n5 o2 [' R; E // take no (simulated) time. The M(foo) means "The message0 t% `$ F7 K: H; |
// called <foo>". You can send a message To a particular8 A& o/ s ?2 K& Q
// object, or ForEach object in a collection.0 n }4 c* l2 x
, o4 \" l) y" s! u6 v J( N: ] // Note we update the heatspace in two phases: first run6 [. b2 \/ T/ O9 ?. M
// diffusion, then run "updateWorld" to actually enact the' }( a. }- y4 T/ N! s+ y
// changes the heatbugs have made. The ordering here is
' Z0 u4 d( ]8 N' x/ _. Q+ l // significant!5 A" m1 H5 l5 O# B' y
L1 U/ {8 |9 O* n2 z5 \
// Note also, that with the additional
$ r+ V8 c& J9 }/ l! S/ C `7 C0 A // `randomizeHeatbugUpdateOrder' Boolean flag we can2 o" l! w* q: `% H. I& z) w; z
// randomize the order in which the bugs actually run' H( a! Z# {4 _% E. G
// their step rule. This has the effect of removing any) H* U, k2 i5 O# D% {. z8 P
// systematic bias in the iteration throught the heatbug7 L1 N) _' b6 [
// list from timestep to timestep
+ G' m+ K# u d2 g9 O; T: d/ F" b# ^ , d ]& M$ Z) A9 B
// By default, all `createActionForEach' modelActions have5 l: y# _! r8 Z
// a default order of `Sequential', which means that the
$ r5 T2 d4 w& _) y- w' e // order of iteration through the `heatbugList' will be
4 P- `* D( Q+ X9 L+ `1 i0 S- v // identical (assuming the list order is not changed, j1 h% u. r8 N/ q2 Q4 ?
// indirectly by some other process).& Q5 N z2 B w; c; b4 z) L
q, N% v! t: u4 l7 t. _7 |# f0 W modelActions = new ActionGroupImpl (getZone ());
& ` Q# M3 L& D2 b
; j! |( k+ o) H9 k* K+ D2 Z' i4 o try {/ }$ E; | [& T1 }
modelActions.createActionTo$message4 H6 ?% \! |) w/ o; L
(heat, new Selector (heat.getClass (), "stepRule", false));$ C" h. P/ {; v! r3 S) V/ p1 s( d& l
} catch (Exception e) {( [5 o3 u; n" ] {, D
System.err.println ("Exception stepRule: " + e.getMessage ());6 e' O" d* r1 t) c
}
8 h9 e3 b' N! v a% t5 t% Y, w+ E% O) `9 ~
try {
! P. M0 t0 a' D Heatbug proto = (Heatbug) heatbugList.get (0);
1 Z3 I: `, N1 P Selector sel = % }, Y. S% O0 T( L& Y+ f z
new Selector (proto.getClass (), "heatbugStep", false);) A0 {; [, |8 P9 Q
actionForEach =% E6 M" B- ~0 _3 k8 L
modelActions.createFActionForEachHomogeneous$call
1 W2 t: j, b' u (heatbugList, f# l; C, |9 {, H2 G
new FCallImpl (this, proto, sel,
! d& Q5 P7 M3 \- I3 ^ new FArgumentsImpl (this, sel)));
9 D0 I8 h- B) @8 V7 G/ x% Q } catch (Exception e) {
O% _1 C4 S3 m( r e.printStackTrace (System.err);
# n2 {4 a6 R# m/ D* V4 m! c }$ k, G* H6 L8 x- P3 m/ B
+ `, G& i& r; A syncUpdateOrder ();7 h% n+ P3 w1 P/ M. L
# E+ X9 R! C* o4 w, N1 k$ [
try {
: f/ [$ R% [+ l' `! e$ F, h: d modelActions.createActionTo$message , Z2 `% a) b/ {
(heat, new Selector (heat.getClass (), "updateLattice", false));
: y6 y9 {+ C: k" e } catch (Exception e) {
4 _. q+ v. ~& w. b- G System.err.println("Exception updateLattice: " + e.getMessage ());
. v: v( R+ q% \& L! ?! b }, X$ f6 J+ m! O) r3 H& ?
4 I+ h9 q) r5 O' Z5 Y5 i/ y
// Then we create a schedule that executes the
" ?" u( c0 S+ b- i! S9 b8 T // modelActions. modelActions is an ActionGroup, by itself it+ D" |( L9 K! i, i: \& T& a
// has no notion of time. In order to have it executed in
, e' \; f* K6 _! i: G8 ] // time, we create a Schedule that says to use the
6 T3 z$ z6 Z# }3 O* p. W // modelActions ActionGroup at particular times. This) j4 o* Z- E; e
// schedule has a repeat interval of 1, it will loop every* [" U4 E& S9 V$ q6 H! [$ o
// time step. The action is executed at time 0 relative to
8 @, l' |/ T$ L% b$ S2 h0 \ // the beginning of the loop.# ?. g7 g( r3 c; m
+ X- I# }6 b8 x; o0 M3 a
// This is a simple schedule, with only one action that is \8 h/ s* _& R+ w
// just repeated every time. See jmousetrap for more
. B' s6 [; }+ V // complicated schedules.& c8 h2 c8 J; I/ D
. z! z$ e4 O. E7 g) u
modelSchedule = new ScheduleImpl (getZone (), 1);5 T" x8 H8 Z1 Y: N' n% L/ d2 n
modelSchedule.at$createAction (0, modelActions);+ d8 [; i3 ~+ X& e
. A7 V! q7 R4 V return this;
# T6 n, a1 j4 v- W7 m$ F/ Z9 h } |