HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 a* z* q; U" ^5 z: B
- ~; V- R! ?- r1 o2 G public Object buildActions () {
4 | l- n! g7 W/ P) T super.buildActions();8 _: V" m+ r. A
! @( q. f* r* Q/ e( ] d) m6 j
// Create the list of simulation actions. We put these in
. n, E# l$ ~8 w( Y5 I$ ~& s // an action group, because we want these actions to be" e6 v2 ]8 |' u- w/ {1 Y; u
// executed in a specific order, but these steps should
* D1 n+ I1 w7 r8 S // take no (simulated) time. The M(foo) means "The message
v+ M8 v$ K' L7 `4 q( u // called <foo>". You can send a message To a particular. c7 y( _: n% I* G; m6 c: Z/ j9 `
// object, or ForEach object in a collection.; q+ q' w& L- Y
+ n) `1 ]# e/ c( k. |( H
// Note we update the heatspace in two phases: first run
( z, E! m8 \" O2 w: Z, s // diffusion, then run "updateWorld" to actually enact the' i7 K3 w/ k( {9 o4 ?5 x4 c2 |: u
// changes the heatbugs have made. The ordering here is1 k% ?: E' E# n9 V% k, I
// significant!: v3 M$ K4 Q: p9 n
; z6 o; T9 k* H+ O5 {- a3 C
// Note also, that with the additional) @# O3 G1 c4 J9 ?+ ~9 U
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ I9 W( y4 ]! u) E/ A, ^% p // randomize the order in which the bugs actually run
' v, W5 ^7 o) q/ H& {1 M( c. O+ @* p // their step rule. This has the effect of removing any* L" D& h( `7 D3 ~. V- _; C
// systematic bias in the iteration throught the heatbug
2 z: G$ p, `, { // list from timestep to timestep
8 W6 c) J3 R8 X- _3 F % I: Y1 d( `$ ]0 L, ]: I- P0 o$ Y1 W
// By default, all `createActionForEach' modelActions have
" X, s" C% _% o0 C // a default order of `Sequential', which means that the& V6 @1 T1 W0 z) I
// order of iteration through the `heatbugList' will be
# _/ Q2 c# ]& Z$ G6 p) B) H // identical (assuming the list order is not changed& e/ b. R7 [* @% e6 v
// indirectly by some other process).
& o' t0 d, N6 O* U
: W2 h0 j. F5 o$ L% z! @0 V modelActions = new ActionGroupImpl (getZone ());+ J7 l1 o& j+ {0 T( N
1 @2 R9 @; B) i6 i- T( P9 {1 i try {/ J* ?3 F4 r+ W& H& c( ]
modelActions.createActionTo$message
% P4 ~; o% z" B( S, s5 K4 ~: B (heat, new Selector (heat.getClass (), "stepRule", false));
: J( \1 p2 u4 K e |6 p } catch (Exception e) {
7 Y6 F6 O& C1 ~+ i) ]4 Z System.err.println ("Exception stepRule: " + e.getMessage ()); v7 ^' A3 t' k$ M6 P
}
) \( c8 g3 D6 T. w5 g( \% j5 }
. i6 p- o- M8 ~2 X3 R try {
7 P0 q! x8 B- O% E5 |* q% s3 ? Heatbug proto = (Heatbug) heatbugList.get (0);" _# P2 M+ |: A$ o- m A: P
Selector sel = 2 e9 G, x1 _( I6 a
new Selector (proto.getClass (), "heatbugStep", false);9 C. b) }2 \3 X3 W0 q( V: W
actionForEach =
: R) g6 _. t/ M modelActions.createFActionForEachHomogeneous$call! ?% l, e6 E0 I% P
(heatbugList,
0 |- U' e/ ^$ T2 @% e( U/ ^1 b new FCallImpl (this, proto, sel,: F5 o0 R* p* W* @! I. I
new FArgumentsImpl (this, sel)));
0 }( m; t3 w, C n) A1 `* h" t9 z } catch (Exception e) {
( t: t& S0 U8 x& b, S# T9 E e.printStackTrace (System.err);
' M# K9 X+ g9 C7 u7 ` }
7 v+ i1 A7 V& W! j8 N
9 ?9 u% n, ~: c4 h2 M& y% j% [ syncUpdateOrder ();3 ?7 F2 a* t4 {
% R* N- ]6 f; a
try {
& {, ]7 s/ j8 H2 X& n6 _% h: d modelActions.createActionTo$message " K8 J! w+ g+ Q+ p+ B
(heat, new Selector (heat.getClass (), "updateLattice", false));3 h+ h/ F4 L) @1 r! ~ H
} catch (Exception e) {3 x% r" Q K; N3 `
System.err.println("Exception updateLattice: " + e.getMessage ());: G$ d" C- z# i" V
}+ y! n3 t% V3 H' U g! H' t0 L
. y9 R( z1 \6 D) A7 L
// Then we create a schedule that executes the
- [! }) U p) i6 n7 c // modelActions. modelActions is an ActionGroup, by itself it5 c- d) {+ f( q# n( |* e
// has no notion of time. In order to have it executed in! J' E+ N* y0 b* x
// time, we create a Schedule that says to use the* E! P1 t( x* Q2 j( [4 l
// modelActions ActionGroup at particular times. This0 }; u5 w [% X; ]" {/ t
// schedule has a repeat interval of 1, it will loop every
1 g$ k3 A; \9 v l8 G" X // time step. The action is executed at time 0 relative to) |0 X" L6 h; r% c
// the beginning of the loop.1 b3 M, ~. t0 A2 p
( X# j. a y- g1 r8 Q) g6 s" r // This is a simple schedule, with only one action that is
0 z" h2 S3 M5 \1 R, \4 Z' G, u: O // just repeated every time. See jmousetrap for more
" E* O2 A! A# t9 [! o' P" h/ l) g' @ // complicated schedules.
1 `1 B4 Z: @4 X - R; r( Z, C3 [9 \7 }6 p
modelSchedule = new ScheduleImpl (getZone (), 1);( r- [& H& @8 u; ~6 `
modelSchedule.at$createAction (0, modelActions);$ D$ J& M" V4 @
7 V* ]% S9 A4 c! N& ]/ e @5 Z return this;
0 |) |+ i/ I3 A2 x. { } |