HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' _& s) h4 U" c* j9 N; C# j7 D2 Z8 ~* J" W1 ^
public Object buildActions () {
* ?; Z2 r$ L0 c/ _. @ super.buildActions();: Q" G1 e3 R$ ]2 D+ N* _
) X# s6 Q; K. @1 {& g
// Create the list of simulation actions. We put these in
5 C. n& \2 z) D+ X e& N0 V& _ // an action group, because we want these actions to be$ z2 h+ ~9 Q- U$ n9 X9 `: h
// executed in a specific order, but these steps should. G9 k: G4 \, z% N5 I3 b
// take no (simulated) time. The M(foo) means "The message
9 F0 v4 p9 M$ t8 P; O0 [ // called <foo>". You can send a message To a particular* K5 }' q0 K9 ~ n9 X- }6 [2 J# [
// object, or ForEach object in a collection., a6 g) ?! q" d5 O, P5 H- }7 J9 k6 F
. l: E9 {1 F* x; W( \4 o
// Note we update the heatspace in two phases: first run
}) d1 [; ]6 H2 H/ F! y // diffusion, then run "updateWorld" to actually enact the
& {7 [+ G6 I) w$ g // changes the heatbugs have made. The ordering here is# O& b/ P( A" ^ P+ p+ T
// significant!
9 S5 ]( L9 C+ A7 B& E- z
" E: M5 K& v$ [* o+ b // Note also, that with the additional1 ]$ S. V; ?- v/ S Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# D |& }4 n; D8 l6 U // randomize the order in which the bugs actually run, `6 O: U4 z8 ]' }8 {$ L( X
// their step rule. This has the effect of removing any
+ v$ q# s$ h4 V' ]1 W // systematic bias in the iteration throught the heatbug0 b8 }$ ^" K6 I/ G/ V# ^" Y
// list from timestep to timestep i: e; G/ s1 R' ]+ K
% e+ O/ ]& `! Z% o // By default, all `createActionForEach' modelActions have
3 t$ \1 z4 [3 D // a default order of `Sequential', which means that the
* u( }' R0 j5 G, C6 ?! X // order of iteration through the `heatbugList' will be: Q3 f: j8 m7 H% E
// identical (assuming the list order is not changed
2 t7 h2 F" C7 {; u // indirectly by some other process).
7 W# P, H# k, f' k) E% Z! p
5 L$ }' F* e& z/ h, | modelActions = new ActionGroupImpl (getZone ());# d" M; V% b9 k) a: H
3 L( q, a4 x! f1 ^
try {
) ? W' b+ K& a modelActions.createActionTo$message" v' r ?. f5 Q' ~) L' y
(heat, new Selector (heat.getClass (), "stepRule", false));& \0 F) S" I X+ E
} catch (Exception e) {9 Z: p7 e% f; a5 ~3 ~1 S
System.err.println ("Exception stepRule: " + e.getMessage ());
7 S# [* v& T2 i. c& K( p }& j; Q1 P |8 @9 H6 k
3 z1 e1 o* h" c* ?% Q) s5 a# [1 s9 v
try {
% B! I7 ~6 }' }: B. I% k, _ Heatbug proto = (Heatbug) heatbugList.get (0);
/ g+ q5 g) U$ _: p# t S& ?/ l Selector sel = 6 K3 C/ r. D1 ]
new Selector (proto.getClass (), "heatbugStep", false);2 g. T, ]; ?) r/ Q
actionForEach =
8 {9 J, Y0 ^6 H: w% w. Y) J modelActions.createFActionForEachHomogeneous$call
% R5 \" A" E& W9 d (heatbugList,/ A3 b0 U$ D8 [" C; u$ e8 I) v" i
new FCallImpl (this, proto, sel,
3 L& C: G( s! @) c. x new FArgumentsImpl (this, sel)));
0 J; K/ K1 `3 L( x1 g* u } catch (Exception e) {% B& T9 L. ^5 e: a
e.printStackTrace (System.err);4 N0 K" L$ O# u9 @2 F$ F
}' y1 \% v8 X, I
8 j% g+ g' ]; ~4 F8 `9 ^! Z' m
syncUpdateOrder ();
* b! z) Z+ M' {* r/ X0 B. X, T2 r" M0 l) _' y
try {# r2 Q6 h( V1 \( z1 \' f
modelActions.createActionTo$message
! \1 [7 }; T( [9 c$ l (heat, new Selector (heat.getClass (), "updateLattice", false));( {- a: l) ], N8 [0 m
} catch (Exception e) {
! }* L& N7 N1 g- W) y System.err.println("Exception updateLattice: " + e.getMessage ());
) K* O# ^/ P% I: H; J }) L% i, h6 c5 v: N
" d3 Z4 X; f9 B. Z, G5 `4 W P // Then we create a schedule that executes the
0 M1 N; R# y9 k8 V // modelActions. modelActions is an ActionGroup, by itself it
; L# M) Y0 }% ^5 s // has no notion of time. In order to have it executed in
2 K! M/ I0 m/ T // time, we create a Schedule that says to use the
8 Q- R c$ X" i! r7 [ // modelActions ActionGroup at particular times. This, M# ^2 N2 ?. f
// schedule has a repeat interval of 1, it will loop every
2 Z0 O% U/ t* n; w; M( J$ d( h // time step. The action is executed at time 0 relative to6 p W {: J* F5 y( y
// the beginning of the loop.- b+ c" I: d5 S( ]# ?! C/ }8 B
7 G5 Q8 B ]7 q. S9 b // This is a simple schedule, with only one action that is# N" q( [ M* I% z1 W! W
// just repeated every time. See jmousetrap for more f, t C# p6 V' s* p
// complicated schedules.
5 c+ L# P& ]5 d8 m2 g1 c8 R6 O$ B
3 }0 h; P9 B0 i" A, t# J7 H modelSchedule = new ScheduleImpl (getZone (), 1);+ C8 _3 [& O; v! H
modelSchedule.at$createAction (0, modelActions); w8 L) ^3 j, ?) ?0 r4 M0 K) h' @$ b
; {9 F, `0 C9 m7 d
return this;/ U& R/ A8 P) M: l7 F$ ~1 q; v
} |