HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 x' a5 g" L* }, F9 o9 J$ D
: _$ {* b. Q* V3 H" B' I1 z* h' U public Object buildActions () {' [1 x/ [8 H1 b% B. k9 m
super.buildActions();
* J, [. {3 s1 J6 O# |7 i . R; o+ B! k* ]$ U
// Create the list of simulation actions. We put these in
2 V k8 d7 f( Y6 p# K# Q // an action group, because we want these actions to be
. z" }6 H4 ]3 N- i! b // executed in a specific order, but these steps should
6 _6 h1 b3 \4 u r7 M9 S& M( e // take no (simulated) time. The M(foo) means "The message8 R5 e$ d2 a( z/ I$ Z& t. Y% o
// called <foo>". You can send a message To a particular) K% v& C9 H4 ~- _. f G9 ~
// object, or ForEach object in a collection.& a- h7 E, R2 P
@. |9 l: I! h& M* W$ L
// Note we update the heatspace in two phases: first run
% v) b; h( r. \* k6 N // diffusion, then run "updateWorld" to actually enact the* k2 ~' |" p# o) q& E
// changes the heatbugs have made. The ordering here is) i5 b5 ]- w" T$ H0 a6 a1 K: `! Z
// significant!6 `* f: u4 Z; p/ y1 t' ?
R& N% A+ e9 G. R: j // Note also, that with the additional9 T; a3 n9 ^" F B8 N1 q" {
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 ^5 r c; h* f" C I/ A4 z // randomize the order in which the bugs actually run+ b" M; m% r. y/ M. ~. W
// their step rule. This has the effect of removing any
- E0 r& p3 h% C$ \! r6 q! z, o ~ // systematic bias in the iteration throught the heatbug. K8 [3 z r X! Z h7 J+ Q7 u
// list from timestep to timestep4 ]+ K7 `+ T0 L
" z3 l, Y9 O7 o& a/ c! X // By default, all `createActionForEach' modelActions have
0 ~, _5 Y5 L: F // a default order of `Sequential', which means that the
5 F3 D2 o& { o1 v4 m, x5 t6 T( k8 p // order of iteration through the `heatbugList' will be
( b- u! s6 L' @6 n6 H // identical (assuming the list order is not changed4 h3 j6 M1 K- a1 x/ S" B: N0 c
// indirectly by some other process).3 j0 ~% Z" `6 _2 |+ x6 t
4 l# }1 k3 ~; J4 d* |' s
modelActions = new ActionGroupImpl (getZone ());
+ d* R3 ^; p! c. A0 [
3 C+ h4 W1 Q( G& p: J( M$ p try {
# s& q# w& j, j7 K! `+ p: V( |& r; y% } modelActions.createActionTo$message% V2 l; H8 O1 I3 l
(heat, new Selector (heat.getClass (), "stepRule", false));
, b3 @ ~5 i$ F! L' y: X } catch (Exception e) {
5 f- N# H+ @/ M/ o9 h) c& P# j System.err.println ("Exception stepRule: " + e.getMessage ());
8 o8 N4 c5 a: Z8 ]) d }( N( H1 d( v4 q5 g7 V/ a6 t" m, {
5 H- L" H4 e( `+ ~: l4 u
try { s7 ^) w1 g6 a$ V3 n5 A" u: l
Heatbug proto = (Heatbug) heatbugList.get (0);
7 y! S4 r8 q! T7 @8 s Selector sel =
/ a7 Z! l6 o9 ], E9 \0 g new Selector (proto.getClass (), "heatbugStep", false);; m* m/ O. c0 J* U0 x
actionForEach =: A$ A& ]2 I# d2 P2 ^
modelActions.createFActionForEachHomogeneous$call- ]: @4 J/ q/ U
(heatbugList,( ^; x Q* x" A5 Z
new FCallImpl (this, proto, sel,1 f, S# c0 j' O
new FArgumentsImpl (this, sel)));
6 U% h: y- v7 k( e7 V/ } } catch (Exception e) {" v. q3 ~# X0 t8 q4 V9 t e% p- d8 K
e.printStackTrace (System.err);% J ^0 K6 f* p0 U
}
* r) Z9 X3 ~& ]2 S
8 m" {/ _- m1 N& ~. q( D9 g8 o syncUpdateOrder ();
0 _; p6 t# ?' m$ W N
" ?6 j4 O$ ]2 |" D9 H- \1 \! ^% _ try {
' m# _- x4 O; d modelActions.createActionTo$message
- P1 A6 p) a& B; Y. ? (heat, new Selector (heat.getClass (), "updateLattice", false));8 \0 ]( ?. f, N) |/ M
} catch (Exception e) {
8 `7 A4 Y& i0 e; A) O System.err.println("Exception updateLattice: " + e.getMessage ());$ m" n% l# H: |! G( _
}! J, m0 Z1 Y' v
" D7 t3 K4 S) p m5 S2 C // Then we create a schedule that executes the( |) _/ |& {. t8 W$ Q9 x& c
// modelActions. modelActions is an ActionGroup, by itself it r& |0 r& F; s1 ]5 \
// has no notion of time. In order to have it executed in5 t) y5 t& p& t5 E1 L" l
// time, we create a Schedule that says to use the
9 a/ g8 G% W O7 z6 W1 Y. R! l // modelActions ActionGroup at particular times. This% \7 E+ i' U9 m5 v" @
// schedule has a repeat interval of 1, it will loop every
" b5 H: s7 J( B0 ?' |" B // time step. The action is executed at time 0 relative to0 Y+ K% O5 r$ z" Y% z$ {% E. g
// the beginning of the loop.# \1 ? V& ^4 \) T
! u8 l! w' x5 m" G/ `: p // This is a simple schedule, with only one action that is% B1 ^* U; h$ a5 b/ P0 P# ~$ V
// just repeated every time. See jmousetrap for more; B0 s6 H, x2 a/ P+ H
// complicated schedules.
8 n0 `: |9 T8 I' H3 w( T+ { 9 |/ C. z8 `3 c% x
modelSchedule = new ScheduleImpl (getZone (), 1);
: O! k8 ~" _+ y2 j8 Z& T; H modelSchedule.at$createAction (0, modelActions);: O; K9 B& U) g, U9 t3 |
. S8 `( K& G# [+ q x
return this;
4 M ]) C# J# d' x$ g. h6 ` } |