HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 b# m: y1 l. c7 M7 \/ V6 i8 X1 V4 N( h2 i: z
public Object buildActions () {( T# y! q8 b7 ^0 m& o7 d
super.buildActions();+ i& n" k0 T+ J7 t4 a( b, r. n& p
% D8 s4 Y7 V) M: R: V& h
// Create the list of simulation actions. We put these in# f! P! ?$ p9 |# Q) p. z$ M' Z% v# N
// an action group, because we want these actions to be
* Y$ _2 C& U- g- U! \ // executed in a specific order, but these steps should
* p( p0 ]7 |* X* f2 ~+ g) @ // take no (simulated) time. The M(foo) means "The message( A4 ^- Q& p, l9 X$ {" p
// called <foo>". You can send a message To a particular
$ r! T8 E6 s/ ~ // object, or ForEach object in a collection.
: e9 r0 [! |9 ]$ j) `0 z 3 g$ U/ ]* J7 s# T- o
// Note we update the heatspace in two phases: first run
) }( ]' T7 r0 I! e ` // diffusion, then run "updateWorld" to actually enact the
8 f: U( v/ @ ?5 O: ?6 a" m // changes the heatbugs have made. The ordering here is) I. l6 q0 z1 t9 p: X9 e
// significant!
: ]' I& w% @6 F# M o+ K7 [$ W+ w: ?/ [5 N
// Note also, that with the additional; t2 Z: F4 x1 I' _/ a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, j0 M" B5 V+ C // randomize the order in which the bugs actually run1 \! j$ j9 H7 `4 X7 l9 X7 K) J
// their step rule. This has the effect of removing any
- b7 n& U5 a+ { // systematic bias in the iteration throught the heatbug0 ~3 s* D* r- m k3 J3 k% `
// list from timestep to timestep* ]6 B% w7 Y8 P/ ^$ Q3 a
0 {' F2 a2 |: H+ ]
// By default, all `createActionForEach' modelActions have" T$ R" Y+ D/ J7 x- m
// a default order of `Sequential', which means that the2 k/ h: e8 p$ R
// order of iteration through the `heatbugList' will be$ f! v" c* H! G1 u4 q
// identical (assuming the list order is not changed% L1 N/ d# ?) J. O- @8 C; K' S% y" ^
// indirectly by some other process).' A. {6 A' E6 a2 T
! m$ |3 L3 \) o! W" v4 c
modelActions = new ActionGroupImpl (getZone ());2 Y1 i% h( r& u
" ^: x0 T2 N( q% j
try {& U: B8 x' ?; P) J1 a
modelActions.createActionTo$message
3 l$ l4 a* {* _. U (heat, new Selector (heat.getClass (), "stepRule", false));
- r! G8 o. i4 N" k$ p% I' x } catch (Exception e) {
2 G" n& n' o% z# R y& K System.err.println ("Exception stepRule: " + e.getMessage ());, N2 H7 l S8 A
}
1 ]- R; E" }* ?, h3 ]: k0 v: n5 H
. x- [6 S7 {) r& _$ H+ L9 T& D try {2 C" ?; j% k ]) B7 I1 a
Heatbug proto = (Heatbug) heatbugList.get (0);
5 ]9 h+ W3 w5 i4 g Selector sel = ; a7 j+ ?3 P& Q; T1 p* t, n# W
new Selector (proto.getClass (), "heatbugStep", false); V$ A, q2 @( V+ }2 r" N, g
actionForEach =8 f; L2 T `3 V" o% b4 u: ?6 l9 w$ P
modelActions.createFActionForEachHomogeneous$call5 c) I% j. O* |! a, P
(heatbugList,
& |5 L |" I8 b% X4 W i new FCallImpl (this, proto, sel,
5 m% s' N% ]: X% w! y0 v! `4 a8 a new FArgumentsImpl (this, sel)));. f& Q7 a; d7 m9 M8 ]1 s8 j$ x
} catch (Exception e) {
1 Z" e. t; s8 o- }5 U6 A e.printStackTrace (System.err);
$ H8 @ U( M6 U1 h5 t# C3 V }
; d4 [7 n: T' ^3 \ 8 [2 G6 T5 O1 D3 q& f$ g
syncUpdateOrder ();
7 U9 u7 d- m9 H9 G. ^4 y2 ]/ r/ r+ X( k8 i
try {/ m. y8 u: U! B6 Q% `; y2 Q) o
modelActions.createActionTo$message 8 P7 K9 P, G8 m# |/ \! f8 o
(heat, new Selector (heat.getClass (), "updateLattice", false));' a/ R2 X8 K o! E) i) o
} catch (Exception e) {
( w) K. |0 ~% t4 Y& d System.err.println("Exception updateLattice: " + e.getMessage ());
' S8 _( E: Y6 x% T) z' T6 S* O }/ {" Z% w" [7 z' y% z
( l# ~, v, U3 s/ G5 R
// Then we create a schedule that executes the
. ~3 d5 Q$ L- C0 h: v: a- I0 Q // modelActions. modelActions is an ActionGroup, by itself it
3 r* i/ [3 U0 G `) s1 | // has no notion of time. In order to have it executed in/ M: d- E% X8 t$ f3 m7 s$ Y
// time, we create a Schedule that says to use the8 H& @( F( u: M) S
// modelActions ActionGroup at particular times. This/ i/ l% |* l" t, C4 V
// schedule has a repeat interval of 1, it will loop every3 d( P, L# U. ]% K& q# N- r
// time step. The action is executed at time 0 relative to
/ g2 V( ^" A9 D) }& P$ D5 q // the beginning of the loop.
7 c9 l- _4 f8 ~4 b) M1 e8 i. N
& Q! |2 N8 s: e // This is a simple schedule, with only one action that is
3 B2 M* n% R5 w- e // just repeated every time. See jmousetrap for more
& R6 ?9 d2 L. z$ w$ D- W6 B0 j // complicated schedules.
; q% H( s! Y# w2 u! O- B" _
) _. o4 m+ d- t4 c& a modelSchedule = new ScheduleImpl (getZone (), 1);. w( \' `& Q" ~6 I6 E/ ^
modelSchedule.at$createAction (0, modelActions);
: a. _% \. C, v" I0 c% u4 {9 r0 Z
( `5 W4 |. T9 ]6 M return this;; @# @* C+ o) Y6 }
} |