HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 M; g, @& \4 d- Z
- b4 b1 u2 O7 a7 L public Object buildActions () {- Y) k7 o1 V: b4 j7 j, s
super.buildActions();
9 Q5 B0 \# X4 B1 A# W$ |3 Q8 ` " Y/ p4 G1 D j/ t9 G
// Create the list of simulation actions. We put these in: B2 J- U! H$ Y
// an action group, because we want these actions to be
" [& o( u. \) L* W // executed in a specific order, but these steps should. {0 v# G) Q. E3 {* A! y
// take no (simulated) time. The M(foo) means "The message5 n& F8 ]0 I7 K ?0 c7 j
// called <foo>". You can send a message To a particular
8 s" ?' Z& O2 s9 v) q3 [ a // object, or ForEach object in a collection.: I% W' q) |2 z* H. }: |
% ^% h- I0 v l // Note we update the heatspace in two phases: first run2 i7 h1 o/ e) x8 u
// diffusion, then run "updateWorld" to actually enact the
9 I1 w3 W5 _ r# s, i // changes the heatbugs have made. The ordering here is( _: J) y! N# B. ]7 \4 X; i3 }
// significant!$ Q# u# k2 A* I
: c+ a/ `, Z; Z' D8 R
// Note also, that with the additional7 @0 b, C9 R+ p1 G2 w8 g
// `randomizeHeatbugUpdateOrder' Boolean flag we can- G! n$ q' L+ h2 H7 w
// randomize the order in which the bugs actually run
- \# g. y; O) }! J, W { // their step rule. This has the effect of removing any
3 ]: e: B; ~" c( ]8 Z // systematic bias in the iteration throught the heatbug
' N- R1 @1 c/ F // list from timestep to timestep# ~: v3 \" n% j; }
' e" O+ x9 h' @1 O. Q1 S
// By default, all `createActionForEach' modelActions have% i# f3 ]8 B3 z8 {2 [' W; R
// a default order of `Sequential', which means that the
3 U. ` P+ S5 S5 T. ]$ x1 |5 ? // order of iteration through the `heatbugList' will be0 g# }6 ^2 [* L7 Z% Y! Q
// identical (assuming the list order is not changed
7 M$ v! @ q+ k1 p9 d: q // indirectly by some other process).
, ~& Z* y1 R7 L! i7 M5 Z+ `
& x& b- f, H) g, ` o, q' h modelActions = new ActionGroupImpl (getZone ());
! l( E; r2 B/ J0 ~, K
+ F; ]8 m- F5 M$ o3 i5 R3 K try {2 A0 ^- c2 \. O% T; }6 Z( z
modelActions.createActionTo$message2 b9 }% U" c6 S3 e+ Q
(heat, new Selector (heat.getClass (), "stepRule", false));
2 x3 Y: M; t% [ } catch (Exception e) {! ~ [0 R A0 ]" H5 }
System.err.println ("Exception stepRule: " + e.getMessage ());9 T" T1 U! e( O- \! K3 F8 l
}) y! ?" ~( d6 ]. a+ e) Z9 X
+ X4 h2 Y" T; Q try {
& s4 n0 L2 V) A2 I8 L5 \ Heatbug proto = (Heatbug) heatbugList.get (0);
# O4 v2 X3 p- V1 E, a Selector sel =
7 y1 g& J: X0 Q, Y* A6 K new Selector (proto.getClass (), "heatbugStep", false);* r6 F& u; m% U, N' Q
actionForEach = [, G; T2 q2 ^" F" A0 p" J* m
modelActions.createFActionForEachHomogeneous$call
8 o" k6 g0 u8 S' |2 v (heatbugList,
% k# {6 n& U, F2 \ new FCallImpl (this, proto, sel,
1 [2 R$ X2 s J6 y+ I7 ]" g9 q new FArgumentsImpl (this, sel)));9 N7 K$ P" g' \$ m5 H
} catch (Exception e) {
! g% k1 f7 c6 w, t. F, p+ t# F e.printStackTrace (System.err);
7 G) e2 {" Y/ L5 k }
( m4 u8 U' Y6 i: ~' z
, t p- H' W3 e syncUpdateOrder ();7 e/ b6 m3 ^) J H' d
3 w1 b4 }6 G3 ?. O- x# W, N& E try {
# y' @/ f8 n& C, V modelActions.createActionTo$message
1 c" ^* o0 k% y! q8 e (heat, new Selector (heat.getClass (), "updateLattice", false));
9 y7 {& k' i8 ?# n1 H) F } catch (Exception e) {2 p8 `9 k1 l, M1 c4 g
System.err.println("Exception updateLattice: " + e.getMessage ()); P5 p! B! }/ ~' m. P! c
}
) w1 \. _9 j/ L7 X! L 4 H/ d5 S5 Q1 ?0 J7 m
// Then we create a schedule that executes the
2 p. ~1 N3 Q7 I y // modelActions. modelActions is an ActionGroup, by itself it' @7 L; ^5 J8 G' ]4 @
// has no notion of time. In order to have it executed in, r* W% O* A+ G c
// time, we create a Schedule that says to use the, d- C. `4 p4 l' F% Z' M* e! p
// modelActions ActionGroup at particular times. This) H1 ]% \/ N: r9 x
// schedule has a repeat interval of 1, it will loop every
" [. d" F/ R0 l9 }3 H // time step. The action is executed at time 0 relative to
3 d, E( [+ e. E+ ]) F% B; m& D% [ // the beginning of the loop.
2 O J0 q2 f. [9 z5 q/ f
3 f% ]# H C. q // This is a simple schedule, with only one action that is: j" v4 j5 k3 j3 D5 A
// just repeated every time. See jmousetrap for more7 {/ y0 k; F/ A9 B" U
// complicated schedules.& q/ p8 W/ h0 }
+ {7 ^/ Y$ R% |& N+ ~% H
modelSchedule = new ScheduleImpl (getZone (), 1);
5 T( A' y& b' j2 J; h modelSchedule.at$createAction (0, modelActions);
2 ]! E K) P3 V/ F4 N 5 s# i/ q; C% H: ?' C. n( |% _ m: t
return this;
) g/ W B: s# @& H. f } |