HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 L& v. ~3 ?8 J4 R( I( @
. ?5 @( [8 `6 j. G6 v. u public Object buildActions () {
" W+ k. S8 b- q; R! S super.buildActions();
8 c K8 A; c3 l 2 u7 s2 ?3 b! }$ w
// Create the list of simulation actions. We put these in
6 K3 X& w8 Z& _8 V" Q$ `% L3 _ // an action group, because we want these actions to be
9 o; y$ E# ]8 d4 x& b' [1 _ // executed in a specific order, but these steps should
% Q# W5 f2 O% ~/ q2 W // take no (simulated) time. The M(foo) means "The message" F, {; `0 W4 i; {, I3 }; J: F2 e
// called <foo>". You can send a message To a particular" S/ j) }- `* D m. b
// object, or ForEach object in a collection.
" Q+ P# E- r* L3 g* a 0 U" G6 S6 F, `+ v* Q; Z
// Note we update the heatspace in two phases: first run
7 B/ _: S3 [: E( X // diffusion, then run "updateWorld" to actually enact the
7 A/ R# V, \8 r: E; O. D // changes the heatbugs have made. The ordering here is
, ~' Q/ D# Q# Z0 b& X // significant!4 b' c$ s# M; B4 O1 Q" h
8 b/ W" F* T5 x# Q! P- R
// Note also, that with the additional# X; Z% {' x# M; M$ k+ r
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 \3 D( c& c$ @, u) j7 O( |6 I // randomize the order in which the bugs actually run9 z. ?) |6 I. f% O/ }: v
// their step rule. This has the effect of removing any3 H5 ?3 p$ T z! }9 L w
// systematic bias in the iteration throught the heatbug& n" M. y: D; D- A9 i
// list from timestep to timestep
/ p1 |& H; C) u " I# s$ t2 B( a* A- e$ k3 l
// By default, all `createActionForEach' modelActions have* K+ H/ G' _. d: _" n2 f, h9 `! q
// a default order of `Sequential', which means that the3 k: z' s/ X- x- F0 A' g" K* k0 T
// order of iteration through the `heatbugList' will be
* o, U4 T8 W- G9 s8 V // identical (assuming the list order is not changed
4 P$ I' r# k) N% `, \: h8 F- m // indirectly by some other process).
# ~/ f0 h q; d! l2 G6 t# v* V0 `
, X; C# I- S0 q modelActions = new ActionGroupImpl (getZone ());
' ^8 I& V& d( d( m% C/ z' C. i$ w7 `( w# b' \0 f! z6 B; _2 i4 h) [
try {- B* {" ~) B* ]( s8 m6 X+ S! _
modelActions.createActionTo$message; I. b( ]5 g E6 N0 j
(heat, new Selector (heat.getClass (), "stepRule", false));5 E: V2 i; M& D0 B/ \+ _1 u
} catch (Exception e) {0 c- U) X% a4 e
System.err.println ("Exception stepRule: " + e.getMessage ());
/ k0 h9 v/ [7 h7 D' H! ]) S }7 L3 u$ M, s/ Z& H5 U N
7 n6 F& o9 W& W' y/ G
try {
- `( O: c4 t7 Q }, f0 U8 t& t" q Heatbug proto = (Heatbug) heatbugList.get (0);6 @7 T- V- R0 n; i! ^
Selector sel = $ |2 U6 U8 X8 F# D( b; ^. x
new Selector (proto.getClass (), "heatbugStep", false);
0 [- O2 Z7 \2 P( B actionForEach =
) Q/ V, i' C- V; q modelActions.createFActionForEachHomogeneous$call
% Y% R4 a0 Q9 _& X3 D7 A (heatbugList,9 E# @6 l' H; D/ J* l% x# }$ Q( P
new FCallImpl (this, proto, sel,
3 w+ x% D; K/ }5 g1 x new FArgumentsImpl (this, sel)));, _0 b/ z9 t9 l w% b4 }8 V0 Z
} catch (Exception e) {7 F: N/ n5 A [; R+ A, Q$ k
e.printStackTrace (System.err);/ y$ q/ r, g7 a% f% g8 z
}/ e& E4 `5 c5 P" q1 R8 }
, j9 q+ [8 M/ m+ |, Z- y. b5 c
syncUpdateOrder ();
6 F3 ~# v) a9 B/ B; w4 y' s: z6 I* C; {" I3 E6 Z9 Z3 _
try {. ~, G x" X% B! ?
modelActions.createActionTo$message
$ I. Q0 D* h3 s; l5 U, p9 |1 m (heat, new Selector (heat.getClass (), "updateLattice", false));6 x9 C9 [- ^; O! W+ h; j8 G4 L
} catch (Exception e) {
0 _: Q D# N& E2 s4 p& O System.err.println("Exception updateLattice: " + e.getMessage ());
/ L4 y/ w2 W9 R; n3 U }
, W- K. P1 \6 {( q 8 U' {" `9 h: D; i9 X* V5 A1 e# t7 T1 D
// Then we create a schedule that executes the4 j5 N0 D! w) c6 [: y
// modelActions. modelActions is an ActionGroup, by itself it3 o' |, ]) E8 u. `9 N9 G$ r
// has no notion of time. In order to have it executed in) k" w l& O$ n4 o; c
// time, we create a Schedule that says to use the$ D* d4 ?" x* q( w
// modelActions ActionGroup at particular times. This
9 N% V! V; r. ]8 K$ g) h // schedule has a repeat interval of 1, it will loop every
# q; G9 f' H+ r$ M1 D/ a // time step. The action is executed at time 0 relative to1 M! F4 i5 g# _3 B
// the beginning of the loop.
2 w( y' N. s: p* H) D) D- G7 y7 [. V9 D- h% }
// This is a simple schedule, with only one action that is
3 i- q: Q+ O: g // just repeated every time. See jmousetrap for more
2 m5 Q/ |: G; v6 }3 e: _5 _ // complicated schedules.
" i+ z" o! t( F; [ " _7 |3 }) i" c" Z
modelSchedule = new ScheduleImpl (getZone (), 1);: T* y7 |! ]/ T9 _
modelSchedule.at$createAction (0, modelActions);
/ @7 `% q- i% N8 n9 P( L, a( [ 2 O) P& m; T; D. T% a; f
return this;( v% q2 f% s- x! U5 E2 B
} |