HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# m# t$ {! e% m6 J# \6 H
8 o5 C, M% D" h5 E; H; `! [+ [ public Object buildActions () {
. W( y* F, a$ L8 x) j super.buildActions();
D0 o% S) _7 ~1 L0 Q+ O5 ~ ' k, j/ z6 W+ w: F5 w' Y* s
// Create the list of simulation actions. We put these in% @# S% H( S# L' n
// an action group, because we want these actions to be
. B2 }6 k, W, t& i# d$ w5 P // executed in a specific order, but these steps should
9 C' W8 S: {* m& w // take no (simulated) time. The M(foo) means "The message) o. v2 x6 W# K$ [, ~0 ^; a& X/ s# h, S
// called <foo>". You can send a message To a particular
2 c6 N& I% z0 U, D8 L9 O0 T+ F // object, or ForEach object in a collection.. d( }% f$ {2 `) _) _1 Z0 X
3 J4 m7 a% v3 p
// Note we update the heatspace in two phases: first run
/ I! s, t7 J4 }& o) d1 @$ d // diffusion, then run "updateWorld" to actually enact the H% r( j) M4 h8 }& O2 Y0 r
// changes the heatbugs have made. The ordering here is _2 { ]6 Q$ w+ S% n1 V
// significant!% J1 x, l' |& [9 [
6 f* h( j3 `, X8 b+ F // Note also, that with the additional* r. J1 W9 r& ^$ @
// `randomizeHeatbugUpdateOrder' Boolean flag we can' `6 A5 ~; @1 e \
// randomize the order in which the bugs actually run
$ u& x8 R3 F: f) |5 G( ]5 u // their step rule. This has the effect of removing any" c7 e# f9 M; Y* Z3 @* y
// systematic bias in the iteration throught the heatbug7 Q) n, R- L6 n. i$ _! J) b
// list from timestep to timestep2 t3 M; T! Z4 u6 p. c% n
7 D% B! u5 h) s: X // By default, all `createActionForEach' modelActions have
/ D* |2 T) r8 \- [ // a default order of `Sequential', which means that the* ~+ J0 X9 P) I; w; L
// order of iteration through the `heatbugList' will be7 l/ T# z/ U+ x3 s
// identical (assuming the list order is not changed8 x1 S2 R1 l* G
// indirectly by some other process).4 T5 N1 `2 Q, D+ ?: R
2 ?+ O( L, g1 I6 w- C
modelActions = new ActionGroupImpl (getZone ());
. M- @$ k- q) w T5 G* ?9 Y9 x T) \5 ~! T$ _
try {) N0 E7 }9 d$ b/ h. W
modelActions.createActionTo$message
7 \& V7 ~' G/ ]" q/ m8 e (heat, new Selector (heat.getClass (), "stepRule", false));% W! g% F; [& d, C7 k2 g( c
} catch (Exception e) {/ w) e/ b! B* V3 |4 N8 ~
System.err.println ("Exception stepRule: " + e.getMessage ());
/ \+ c1 a3 O2 C- ~3 c5 f1 \ }0 q9 }8 V8 b8 `, ^0 c& k1 W) T
( i8 J) b4 A1 g% t
try {
# g" H/ ]6 M. F; Y6 O0 X Heatbug proto = (Heatbug) heatbugList.get (0);
( ]7 k$ L; D9 B" V Selector sel =
$ |3 \, ?; v- C$ u new Selector (proto.getClass (), "heatbugStep", false);
$ T( }4 c3 _' v: y; L* u, N' x actionForEach =3 q! U' H% o- [
modelActions.createFActionForEachHomogeneous$call" j6 o! ]0 j( {
(heatbugList,
8 N2 X3 @$ C% D+ U+ Q new FCallImpl (this, proto, sel,
9 Y3 {# F1 N* ?/ i% A2 `7 s5 D new FArgumentsImpl (this, sel)));$ S: ?6 M' U2 {( V8 O" W4 C7 F
} catch (Exception e) {5 @. C5 \9 s0 A5 y# ~
e.printStackTrace (System.err);4 A- r! z6 T& ]. b5 A, O0 h
}% \3 z6 S/ I3 ~, |1 R
* a) P7 W, ]) v: k2 s
syncUpdateOrder (); a1 q) k" p+ W; k3 E! ^4 v
7 T6 e# p, B: }! U5 _ try {' Y( v2 {4 [0 B% i x2 d* u
modelActions.createActionTo$message
, V7 [& G3 G) Q, x) k; K (heat, new Selector (heat.getClass (), "updateLattice", false));
$ @6 ]1 u N9 ]+ b% s5 Q! ^ } catch (Exception e) {7 x& k3 f8 _7 c7 G/ |
System.err.println("Exception updateLattice: " + e.getMessage ());+ l- F" t9 {7 u& p. M
}
: ?( r! W( y p7 Y d
?4 g$ g8 ?1 N, B" i. S% x2 h // Then we create a schedule that executes the
: \9 K% G( p# t, @& m8 W1 G // modelActions. modelActions is an ActionGroup, by itself it' P3 r( ^9 c7 L$ ~; ]
// has no notion of time. In order to have it executed in p& F3 \3 e% f8 w; B
// time, we create a Schedule that says to use the
% |( \3 l3 s" ]6 z7 R, @ // modelActions ActionGroup at particular times. This
1 y$ f& s. t5 ~' f1 k& N4 H // schedule has a repeat interval of 1, it will loop every3 [0 C7 g/ x$ f
// time step. The action is executed at time 0 relative to4 a% C% q; p. c% C |1 d' {
// the beginning of the loop.
) U" Q2 J. Z( Q5 h5 q3 o* h0 U" m$ |" L" W$ z+ y7 ?8 n
// This is a simple schedule, with only one action that is
3 [# k/ ]# h( P0 {/ | // just repeated every time. See jmousetrap for more5 g# e8 v5 h( H8 a B6 b8 @4 W* m
// complicated schedules.
- T4 z* [6 Q4 p. _
, _; b3 i0 N8 i) ] modelSchedule = new ScheduleImpl (getZone (), 1);9 z$ m" q0 u% b) K& @ h. ^6 b# M
modelSchedule.at$createAction (0, modelActions);7 n* o7 R+ u' t9 |: x6 s2 D: C; e
% ]$ x- r# M- m4 ?7 o, i
return this;1 b4 E7 ]; w6 \( x- V
} |