HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# t6 C' H/ N0 G6 p
; l2 i; o/ Q, f- n public Object buildActions () {
9 Y* A$ _! b* z7 k super.buildActions();
( V1 [, T! w! p4 `9 I 5 u, @4 ~* J/ z! R) W0 t# Z
// Create the list of simulation actions. We put these in
- S: v2 q8 I- o7 w0 a3 X- V // an action group, because we want these actions to be
# ]& N! M; w0 l; e // executed in a specific order, but these steps should
3 J- {8 B# H3 z4 `) D/ I9 \ // take no (simulated) time. The M(foo) means "The message
; r( z: {8 N: P; A // called <foo>". You can send a message To a particular
# ]: O* G" `( x1 T. l X // object, or ForEach object in a collection.
' H* u% }, e. {6 [ + W7 D, L6 ~# h! r0 S0 Y
// Note we update the heatspace in two phases: first run7 b* W& t7 S, T' W% s
// diffusion, then run "updateWorld" to actually enact the" F2 a5 b5 D% l+ O) `* f" P$ o( d$ m
// changes the heatbugs have made. The ordering here is; {/ k8 L+ N+ q
// significant!
# l8 q( {* l! [) c2 H1 [7 I# `
" ?7 r. `" v; ^$ E/ L9 @3 z" Z // Note also, that with the additional
% b! f9 u* q% P6 g // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 s# T! |! b: o v) c. m // randomize the order in which the bugs actually run# Z' b# @ D' `
// their step rule. This has the effect of removing any5 j' a6 m1 F2 o$ w- L' K. d
// systematic bias in the iteration throught the heatbug
' R- F% u! s1 i$ ~( i6 B; [0 c // list from timestep to timestep
# ?7 [9 X, q$ m% N
: [: P" \0 W% [6 v4 c! U# ] // By default, all `createActionForEach' modelActions have- ?& I8 P. \0 ]6 _9 d# V
// a default order of `Sequential', which means that the
8 ~; b g- B2 q2 ^ // order of iteration through the `heatbugList' will be# E2 V1 v4 a, t( v% I8 _
// identical (assuming the list order is not changed; q+ }6 U! E: g9 n& e; V7 d! R) `! r4 z
// indirectly by some other process).
) P4 F+ Q$ n: f( v5 H7 }6 L) O% k \
. d; |; ~$ r; o6 b8 m modelActions = new ActionGroupImpl (getZone ());
- }* ^7 e1 K1 t: m5 L" A4 |
- Q5 ]* N1 d* L) O. z( j. T try {
6 w5 {7 ?( K; C: f; s' q- r modelActions.createActionTo$message
# d: O5 j" g4 b, |! u5 Q (heat, new Selector (heat.getClass (), "stepRule", false));( a2 P1 X6 n+ }$ T6 ~1 r; ]
} catch (Exception e) {2 Z1 y" E8 F" t' T% x
System.err.println ("Exception stepRule: " + e.getMessage ());
* O& Q: K1 |6 _" w }
7 q# u# e$ J* `+ D ]0 s* Y
8 z3 D+ Q9 m/ _) I: k# ]7 a try {1 Y- Y. O d& f( ~* M7 `
Heatbug proto = (Heatbug) heatbugList.get (0);) M9 k" a3 T _" C$ r( z: y# g; C
Selector sel =
6 h# O8 t7 S1 J, M, y new Selector (proto.getClass (), "heatbugStep", false); [ L& r# e% k( C: \
actionForEach =2 V* H+ ~' [! ~8 e
modelActions.createFActionForEachHomogeneous$call
1 p5 P, u) A% c! q (heatbugList,
2 i6 P3 L6 L: a# i4 u$ G7 F new FCallImpl (this, proto, sel,# h, g+ X9 f8 ?0 P% g
new FArgumentsImpl (this, sel)));
/ b- f" b) C: A, G& N2 I } catch (Exception e) {, T, q% m% L1 \! c! g( c
e.printStackTrace (System.err);
3 _( N; f1 o3 y' k! f& {/ A" I1 C }
. H, E: D3 d/ k2 y" x/ h7 b% m 5 E) l; g c8 n: C
syncUpdateOrder ();
( @- ~7 ]" ^ s( U$ P4 z1 g. \2 O
( m; [' X T n0 Q! D; {6 i' m try {$ ?6 C; i2 [3 S8 e" T+ {
modelActions.createActionTo$message ; s+ v: m+ y; a8 ^) U4 E# w
(heat, new Selector (heat.getClass (), "updateLattice", false));( {, N& H* R* H; k0 W
} catch (Exception e) {+ f( F1 ]0 Y: X1 N1 q
System.err.println("Exception updateLattice: " + e.getMessage ());
* g; k# P6 o8 G/ l b( V3 G* m3 \ }
0 X3 N5 Q# l# e5 z: N . k7 q, ~+ F. Z* L/ L* X
// Then we create a schedule that executes the
0 _9 p$ }3 X6 g) A // modelActions. modelActions is an ActionGroup, by itself it* S; U( l" }2 `6 d$ S. H3 ?
// has no notion of time. In order to have it executed in5 g: k) N, d, }: P& j
// time, we create a Schedule that says to use the
/ {* F+ q" Q' }. Z7 @& N // modelActions ActionGroup at particular times. This% x2 {; q2 C5 z) T$ f/ [& ]3 N
// schedule has a repeat interval of 1, it will loop every
0 P) {6 O- y& M, A9 w7 `1 k. r // time step. The action is executed at time 0 relative to
, I* o4 i9 H. p0 K \' c0 C // the beginning of the loop.
( Q" f! k5 v7 M
+ m* Y/ N5 A( f A // This is a simple schedule, with only one action that is* c; V4 U% k- d+ y
// just repeated every time. See jmousetrap for more
: {1 L- @5 k+ v# E0 f. | // complicated schedules.7 t, K7 e" M; ^! d/ ~' L5 E. H8 q
& I6 P# j% j/ m' v! G; W# s. Q modelSchedule = new ScheduleImpl (getZone (), 1);
: z* ^ V7 T' g* I4 q modelSchedule.at$createAction (0, modelActions);
; B+ i6 [& Q8 o3 Q8 ` * z/ c" h- P+ h! L0 G: r) K) t3 Y
return this;5 O1 ?2 Z7 V6 L; n+ z% D* W- E; f
} |