HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ l9 [2 H$ i; `1 ?
) Y( [3 V" @9 U6 ~9 t8 o public Object buildActions () {7 C# H% O2 M8 v$ o8 G- H/ \/ h
super.buildActions();
% v' `' e+ i) W5 B) l ' `6 P7 [- p) H! O7 R1 s [$ v
// Create the list of simulation actions. We put these in7 M8 r0 r: \+ p% {& @" M! h& Z) s
// an action group, because we want these actions to be
0 R3 V' k/ [8 L // executed in a specific order, but these steps should
& ?+ ^! f3 E o# c4 s // take no (simulated) time. The M(foo) means "The message6 t: t* Y; g- Q( A8 s
// called <foo>". You can send a message To a particular% R2 R" D6 |0 ]7 v G
// object, or ForEach object in a collection.
' t' O% E! s, s0 x z o) ]/ `% B 2 ~+ j, o/ V; {" c2 C3 P
// Note we update the heatspace in two phases: first run, ^- w5 Y1 k4 L* Z$ T
// diffusion, then run "updateWorld" to actually enact the ?4 S' I0 x% ?7 V _
// changes the heatbugs have made. The ordering here is4 R1 l; m4 G3 B U
// significant!# \8 W# T. m( S( N5 v7 Q+ j
+ w$ ]( r8 S2 X( P. Q6 a
// Note also, that with the additional, Z1 [) t) a* {$ y- m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 x3 C% a, ^7 s: N# c* ? // randomize the order in which the bugs actually run
5 Z0 I* y( Z1 q; D // their step rule. This has the effect of removing any
$ q% c7 s- j# m8 T: N. f, J // systematic bias in the iteration throught the heatbug0 ?7 ?2 Z& C2 m) K
// list from timestep to timestep
- W% _ I9 M+ c. l! o
' A; U% l$ M) ^, @ // By default, all `createActionForEach' modelActions have, j' O' n9 q6 v6 |6 R4 W
// a default order of `Sequential', which means that the
?- z/ s* @* S) w( c. [ // order of iteration through the `heatbugList' will be" e6 O1 x3 z/ I
// identical (assuming the list order is not changed
) F% S7 \9 `7 ~ // indirectly by some other process).
7 Z% b' k( l" `$ x, T ! T/ M+ i* M! m' ^1 c5 q
modelActions = new ActionGroupImpl (getZone ());
& ~; V2 a5 p3 R8 d! W& Q! [
5 \4 n e+ v, {) g$ `+ Z& x; v try {, L! P( Z( }( R2 P0 }- H
modelActions.createActionTo$message
6 w$ A. K+ _2 ^/ K8 E: A$ ~ (heat, new Selector (heat.getClass (), "stepRule", false));+ p2 U3 Z0 d" |) m6 K
} catch (Exception e) {. \/ I% T8 q: K; p
System.err.println ("Exception stepRule: " + e.getMessage ());; x% d' K# B- a- E. W+ v6 G
}" M1 }% v3 e) e( q/ T
! j# L" t3 } F+ x9 @2 Z try {0 Y6 f: N( O A) v% ~! M
Heatbug proto = (Heatbug) heatbugList.get (0);1 w, [) q l; N/ e! ?2 Q0 J6 P
Selector sel =
; ~3 h; G" e8 e2 g new Selector (proto.getClass (), "heatbugStep", false);
9 S' M1 f! c# D2 ^, s; x actionForEach =
' ~: l0 K1 q2 _2 o4 s( {4 t modelActions.createFActionForEachHomogeneous$call5 h# r( L$ a/ o1 `* O1 o# a
(heatbugList,
( T" N8 f2 O6 l new FCallImpl (this, proto, sel,
! Q! |' K+ }. G, @/ M, R0 G new FArgumentsImpl (this, sel)));. T/ a- C, ~8 v2 ~% p
} catch (Exception e) {
; L$ W; H5 Q3 L+ i8 m e.printStackTrace (System.err);
6 _2 Y1 I) e; V0 K' g }
0 f% @& w6 W; J. X" j+ N/ B5 K3 c & C0 B7 W; X1 \9 U8 u( @
syncUpdateOrder ();
. v9 \; f( d8 o) j/ a
?. u2 Q" v& i: C* O4 @# Z" o; ` try {7 O+ q% x: s& J- L6 ]3 i5 ~
modelActions.createActionTo$message # M8 B7 U8 Y2 h6 [# h2 y, M) _( X) g
(heat, new Selector (heat.getClass (), "updateLattice", false));
: p( l1 o6 X6 K4 N6 c } catch (Exception e) {- F8 Z+ Y9 _+ s8 H
System.err.println("Exception updateLattice: " + e.getMessage ());$ m1 f, D R6 v! x8 F. T
}
5 p8 @$ R) t3 T, t+ V7 n / U: H- M0 J) P
// Then we create a schedule that executes the/ _) o3 T% G1 `: ?: M1 b
// modelActions. modelActions is an ActionGroup, by itself it/ [* R# X; o z$ b) F% |
// has no notion of time. In order to have it executed in
9 @* d3 g' t9 L2 w; s" X // time, we create a Schedule that says to use the
* R7 B) Q; W0 Z // modelActions ActionGroup at particular times. This
( ~7 {- R4 Y1 _5 u, X) Q6 g1 Y // schedule has a repeat interval of 1, it will loop every6 \3 }3 h; C, a; y% C
// time step. The action is executed at time 0 relative to
7 ^$ }! c9 ]7 z# M- A // the beginning of the loop.* t! w; g9 q3 n& z9 S1 D& e5 u6 U6 w
; J7 |: P# I2 B2 V4 K
// This is a simple schedule, with only one action that is0 q. _$ S! O$ Z0 w) W
// just repeated every time. See jmousetrap for more
; M3 \% _' i. ?. U5 e7 w // complicated schedules.+ ?2 g% M! D- T9 t
+ t L) M9 k# V; u
modelSchedule = new ScheduleImpl (getZone (), 1);+ w% I( }, x4 T! J3 I! F
modelSchedule.at$createAction (0, modelActions);
9 ^8 D i0 u3 l+ e) g$ Q
7 ]$ o4 t1 b2 u. G5 F2 x( h) f% G9 | return this;4 }5 C: I; R) W: @/ l, G! @ a' m
} |