HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 G+ J: c' R7 m5 M f8 l0 }" A( ]8 c$ p
; Z* g6 I" l* x
public Object buildActions () {- R$ _! r) r/ t* N; F2 u' ^. K5 {
super.buildActions();8 n0 I- i" C: a9 X2 N; p" ]
. B0 U. j3 X, t |5 G# l) H/ [$ B1 x // Create the list of simulation actions. We put these in B7 m' r' ~8 Y% \. M! g2 t8 J3 R
// an action group, because we want these actions to be! O" A# G7 r% ^" _# [
// executed in a specific order, but these steps should4 z/ w- }2 }: K5 c. C
// take no (simulated) time. The M(foo) means "The message+ z5 P1 _+ r/ |, M" P2 `) f5 _
// called <foo>". You can send a message To a particular
) O3 g, n% C* t; p: c // object, or ForEach object in a collection.
/ C5 L( u+ j# z' z# ? 4 {& m2 ?$ L! P" i9 r* R M
// Note we update the heatspace in two phases: first run
4 r- i9 q- r# b" m' m$ c // diffusion, then run "updateWorld" to actually enact the0 q: `- w3 H/ o6 l! t# K# }$ q N
// changes the heatbugs have made. The ordering here is8 u, Z1 T/ m! j( c# j. g, s# H
// significant!
7 h) H- N: G' T1 `9 ~
* ~: ?2 v& m' G7 c% C) ^ // Note also, that with the additional
* r. {: r( z& h% V( I // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ S2 p4 `8 E" s8 f // randomize the order in which the bugs actually run
% ~, n6 i T7 R& h( h Q // their step rule. This has the effect of removing any4 W* t; ^( }! n
// systematic bias in the iteration throught the heatbug
* x/ A) H3 Z( B. T4 g // list from timestep to timestep
0 p' J4 L" M* l, J
$ r( @+ w' S n- T/ t // By default, all `createActionForEach' modelActions have
$ |! ]. \6 m7 Q // a default order of `Sequential', which means that the
' b4 T B+ p9 w, X+ V- h // order of iteration through the `heatbugList' will be
1 Y- [/ v. n8 `1 l) |9 ?) \; w/ i9 R // identical (assuming the list order is not changed# X; D# j6 ^; [/ H/ q; ^+ p+ k& Y
// indirectly by some other process).
% g" l' P4 y* j1 x 9 c# l& a. E) |2 G9 r0 J
modelActions = new ActionGroupImpl (getZone ());
) z& S; G; o5 e) [/ a- W0 @( f( l$ X1 s( h0 a1 d
try {
4 P4 d( i; P+ T modelActions.createActionTo$message
1 A( O2 {" w# F( N (heat, new Selector (heat.getClass (), "stepRule", false));1 s. I0 ^# L% K/ {4 d
} catch (Exception e) {! U4 k' a( Z/ w' R3 L& p
System.err.println ("Exception stepRule: " + e.getMessage ());
- q+ N# c$ g+ L% b }
$ m$ ~# a1 c7 {2 w! a6 f
8 Y0 G k3 a0 W( d0 w try {
! G- W2 i0 H' L7 \ Heatbug proto = (Heatbug) heatbugList.get (0);6 o) V. a! Q" C3 M
Selector sel = * q$ j0 C% D; R( J& O2 C
new Selector (proto.getClass (), "heatbugStep", false);" H9 n8 w p& g; X! q# |8 ]
actionForEach =
- u$ M( G% Z: G9 l modelActions.createFActionForEachHomogeneous$call
4 N7 e2 Y1 U+ I* B$ R1 Y (heatbugList,5 W- I3 E; `7 [! ^) D t! v
new FCallImpl (this, proto, sel,
! ?. k E' o4 a new FArgumentsImpl (this, sel)));6 M4 X9 N5 D B i" J n9 S
} catch (Exception e) {
$ `2 _# l0 [" J# C# r. v( n p e.printStackTrace (System.err);. b* D2 B3 Y, G6 N \
}
+ Y9 w1 J, n. @* }, B* v5 Z Z ' t& J1 ^) D" T: P3 t
syncUpdateOrder ();
+ O4 m+ `* q- Q5 e3 h, u1 O" j
+ A# ?# P, Z/ d, g+ d; \ try {
/ v; m- i5 X; l3 ]9 U* H0 u modelActions.createActionTo$message # W2 E; a5 y E0 S* }9 H
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 r7 U/ B; i* d$ Q } catch (Exception e) {2 U% {" w/ ]! o: z
System.err.println("Exception updateLattice: " + e.getMessage ());0 |* p% A5 |* t; C% J# {
}3 U6 i: A" ~3 X% z% |0 ]+ L- P1 F9 Y
. l1 r5 @: b/ B8 O j E! k
// Then we create a schedule that executes the
; k7 c3 N( |$ ^0 n5 H // modelActions. modelActions is an ActionGroup, by itself it3 D, K) M9 R, `# V0 P1 V' _* w
// has no notion of time. In order to have it executed in& N7 Q1 e: Y# j( l. y$ M
// time, we create a Schedule that says to use the3 m* G$ V# D) q8 B* E: k4 A/ e
// modelActions ActionGroup at particular times. This
* k, _! g& a+ K // schedule has a repeat interval of 1, it will loop every" U* N, U9 e. E0 g; D, {+ F* C5 i
// time step. The action is executed at time 0 relative to6 x$ A9 g3 Z* ?; ]6 B- g6 h1 K; x
// the beginning of the loop.
" [; e! Y x( {" \: c* B. {6 H2 Q8 G% @% O6 l. i, H% h
// This is a simple schedule, with only one action that is
4 P. `# h" ]: P% R' ^5 M/ ~' ` // just repeated every time. See jmousetrap for more
- C7 V2 X# F" Z q* j( V1 y2 I // complicated schedules.0 }3 s; v2 o+ B4 p/ b. g
8 Y3 _5 n9 W8 S2 \! l modelSchedule = new ScheduleImpl (getZone (), 1);
9 E, r0 V4 _! m/ V2 q0 t- [ modelSchedule.at$createAction (0, modelActions);9 G+ c& Y# t$ l2 s
" Z5 U. l# H* Y/ a: O5 P# g
return this;
3 b3 \4 Y _* N" J8 z } |