HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: k1 H$ B8 T6 J$ a+ F* j; N
% p) c# }4 l/ E public Object buildActions () {
# t% @; ?8 ?6 v- Z+ T6 R, _ super.buildActions();0 i/ W# [$ s+ j2 z: E% e
, z/ W: F2 @2 U x2 I
// Create the list of simulation actions. We put these in7 e* i( q1 X# G. a& m n
// an action group, because we want these actions to be r- ~; B; F2 r( E+ u1 E
// executed in a specific order, but these steps should$ `* H% C: z; O. s9 t% y# \* q
// take no (simulated) time. The M(foo) means "The message
+ r* }6 \- v% Q$ @* j, C( [* l( ~ // called <foo>". You can send a message To a particular1 [9 K+ r' v- B8 X) u
// object, or ForEach object in a collection.. V. t+ l# O i' O9 G9 g6 v, Q
7 l* `8 {: m. K$ G% r- c
// Note we update the heatspace in two phases: first run# \: h: Q# l, r6 v+ U' Q0 a) Z% r* Y
// diffusion, then run "updateWorld" to actually enact the4 Y6 l8 f& P7 B) h m
// changes the heatbugs have made. The ordering here is1 z1 k( D' h3 ^6 F
// significant!$ }2 ?) `: H6 J9 ]
6 q2 n9 R$ G5 a _5 l- b
// Note also, that with the additional
- R! \! S; {; _3 m/ b: y // `randomizeHeatbugUpdateOrder' Boolean flag we can
( `* Z/ j6 W8 P; `# t // randomize the order in which the bugs actually run- C) ~) Q1 F [' X, k
// their step rule. This has the effect of removing any" G5 ?2 M3 y* P8 W
// systematic bias in the iteration throught the heatbug! p% t; w, t2 L
// list from timestep to timestep
! G+ y2 k- m( ?4 v/ f/ n: q/ a 5 W+ `3 `* W; Q7 m/ g6 {
// By default, all `createActionForEach' modelActions have4 _# }& |) t; V1 x6 ]: k1 `7 a
// a default order of `Sequential', which means that the) D& B3 ^; B+ |1 U/ y& P, k
// order of iteration through the `heatbugList' will be
d3 X8 W1 O% B" u // identical (assuming the list order is not changed: G- Y& I% |, P, j, }* b- P
// indirectly by some other process).
( H9 d | r! l
+ C3 ]. w$ f H2 s) Z modelActions = new ActionGroupImpl (getZone ());+ I7 b: o: l( d0 I/ q1 n5 w/ a
! x& _0 t3 P3 |9 L6 j- ? try {
5 [5 x1 b. d4 t: i" K3 J7 b5 h r modelActions.createActionTo$message& m0 L) @0 I9 B1 K s; K1 P t, x
(heat, new Selector (heat.getClass (), "stepRule", false));
7 b' _: S. Y" ^( b5 L5 F6 | } catch (Exception e) {
: v" b* h, l& }. `) C System.err.println ("Exception stepRule: " + e.getMessage ());
1 m5 a" c; V7 e4 \. e' b0 ^: T, ? }
% L2 C# j, C" R. V+ @/ m- f7 I A% h2 @
try {
' _; [8 q" D; ~ Heatbug proto = (Heatbug) heatbugList.get (0);
- _: Y$ ~% f3 G% x$ O Selector sel =
3 N. }7 @& J0 }: ?0 _ new Selector (proto.getClass (), "heatbugStep", false);
( E) L/ J* W) g: s9 S) b actionForEach =- ~3 g! `7 O9 }# G/ G2 F% `2 s: ?! Y
modelActions.createFActionForEachHomogeneous$call9 z8 @, U9 U1 ?& @) M2 }
(heatbugList,& P) d5 v( T3 K2 ~' f: I0 x. q
new FCallImpl (this, proto, sel,
* W, J' G; o6 _( E new FArgumentsImpl (this, sel)));+ S5 F2 X' G9 l. S' n$ n
} catch (Exception e) {
6 s7 \# e$ i8 T% E. M e.printStackTrace (System.err);
6 r. [* R) Z( M# z }3 D) R6 M$ w/ V3 L3 R7 z5 i
+ @+ K& ~* |) o% F. A
syncUpdateOrder ();& l3 @8 T9 R4 D# y) @9 U! p
# T) B1 @/ m6 s try {, e' J0 K" e0 Y) J m6 P5 ]
modelActions.createActionTo$message
2 N& h+ d0 V$ W (heat, new Selector (heat.getClass (), "updateLattice", false));
* `1 u/ i4 t; `' r0 T& K3 m } catch (Exception e) {
+ T' ^4 W {! |$ V& E1 v+ }* c System.err.println("Exception updateLattice: " + e.getMessage ());2 u6 {: R; L4 `. m: X8 J
}* M2 ]+ u/ z. ]/ g- U& r. ~0 l
$ D4 [0 U5 @. X; G' A4 m
// Then we create a schedule that executes the6 Q6 O4 H- f$ r- ]' y/ [ T
// modelActions. modelActions is an ActionGroup, by itself it
& ]9 A' b& s9 n // has no notion of time. In order to have it executed in' j! @" J: |8 O8 z- L K
// time, we create a Schedule that says to use the
5 s0 g% J3 I* u4 d: i" n // modelActions ActionGroup at particular times. This0 y; E, }' D) v4 |( j6 F$ F
// schedule has a repeat interval of 1, it will loop every9 [8 e5 X5 t$ }3 m$ D
// time step. The action is executed at time 0 relative to+ N% \, F9 ?) D
// the beginning of the loop.4 O: w7 s1 ]8 m& o2 N3 H& z
W& R7 n% t3 H; s$ N& H! { // This is a simple schedule, with only one action that is* t0 K% v: p8 G. c
// just repeated every time. See jmousetrap for more! A; q- j$ v% @5 O# P t
// complicated schedules.% a0 B: P+ o& A' T3 ^! C1 Z& F3 q
6 W, l: I; r& e( }
modelSchedule = new ScheduleImpl (getZone (), 1);' @2 G5 f4 @, y8 E* k, i
modelSchedule.at$createAction (0, modelActions);
- w* h" X6 d: h
2 n& ^7 z4 a4 G) e6 I4 ?) | N. ?. F return this;
# ^0 [3 L @! e) H9 Q } |