HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 d- X( q' {+ m& S
( ]5 @5 F: D% Z public Object buildActions () {$ h% y! y+ O) \# L8 L- E2 }
super.buildActions();1 h/ O; Y& W1 O2 b6 }- A; _- M
O* P& D2 k' L; ^: G
// Create the list of simulation actions. We put these in% n [9 x& N- {6 V6 d# E$ u2 F
// an action group, because we want these actions to be
$ F: t% \; _- N // executed in a specific order, but these steps should( n3 v( A: B0 G7 U) i2 w
// take no (simulated) time. The M(foo) means "The message0 L, [6 D5 v% ?: o- m2 u
// called <foo>". You can send a message To a particular
4 d3 ~( A/ p6 h( a // object, or ForEach object in a collection.
% x, D! u/ X) O* h- F+ d) N! Q 3 t0 M+ z. A0 p6 P* s1 l0 i! O
// Note we update the heatspace in two phases: first run; j# G. t$ \& N9 ]* K7 y& L
// diffusion, then run "updateWorld" to actually enact the
9 y6 `! l8 D% k // changes the heatbugs have made. The ordering here is
3 ?0 a' u! O8 A1 |' ?- j5 @7 P // significant!
) \# w/ E! b; W 5 z7 N9 b7 Z2 l& Z3 w4 N
// Note also, that with the additional
& B' N0 b1 p5 P // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 H9 W% L) ?9 S" O5 `' t' p: _" j // randomize the order in which the bugs actually run
6 W7 @) k0 W5 c1 g1 Y( V* X. z* [ // their step rule. This has the effect of removing any
" O4 x/ K7 E+ ? g4 c! K // systematic bias in the iteration throught the heatbug
, B5 L2 f/ j0 z // list from timestep to timestep1 x/ t* p5 Y+ _5 N) {5 W
A4 O% a6 I( i4 m- c* v // By default, all `createActionForEach' modelActions have
+ j$ E8 O1 C1 x3 s2 O8 m% M // a default order of `Sequential', which means that the9 Q- v0 J! r. p( W# j2 Q/ e& u- h; R
// order of iteration through the `heatbugList' will be8 i# R" j, K! G/ n* Z
// identical (assuming the list order is not changed
; i% p# L7 e% G* L/ g0 E) P- @ // indirectly by some other process).
& r2 G1 b" u" F* p, [: T
8 @5 |4 Z9 A @' n0 |) B modelActions = new ActionGroupImpl (getZone ());. d7 p8 z( H9 k/ `; m+ S
% U8 `, R! M1 G% P d0 Y try {
. G S5 f4 G4 Y% }' t( c; `, @. _6 @, } modelActions.createActionTo$message% P+ z* h! N# D6 ]9 u7 ^' R- ]
(heat, new Selector (heat.getClass (), "stepRule", false)); e' _: C# G% e
} catch (Exception e) {
# V, b# ~" i6 j System.err.println ("Exception stepRule: " + e.getMessage ());
. B. `; b. A% M; R9 n9 ` }0 P! M2 t' K, f
, O5 H4 L1 t. y `& g. x try {, S; {7 v0 C* _2 g" u* ?& V
Heatbug proto = (Heatbug) heatbugList.get (0);
- u! [, R" N/ ^& Q) e* }, l% k9 g Selector sel = + m5 E9 G s2 ^6 W
new Selector (proto.getClass (), "heatbugStep", false);
- |5 V" O, L, W actionForEach =
* c$ J# ]$ r! v; Y' ^$ E) ^# i4 c modelActions.createFActionForEachHomogeneous$call* [$ b( s* O( r. N
(heatbugList,
4 H+ d2 @) W! o5 _. l new FCallImpl (this, proto, sel,
& V7 _$ r( T8 z% ~% B$ s' u new FArgumentsImpl (this, sel)));
, _/ J" D* K+ ?6 V3 a3 U } catch (Exception e) {
6 R. u/ B6 _$ o3 `: [) T- V6 S7 S e.printStackTrace (System.err);3 b: u4 h" N7 w& t U# G% ]
}) i- g, D9 z0 R( K& T; \
1 P3 d6 N' ~, f* J1 ]8 Z" d syncUpdateOrder ();2 L& I* P; n4 d( n+ M; t r% m
6 {5 w; X0 ~4 d, w% t1 r. F
try {& g9 W2 g, G* }8 Q
modelActions.createActionTo$message + }6 }7 ` i3 |8 O) n
(heat, new Selector (heat.getClass (), "updateLattice", false));( X5 W' t9 p' x5 i2 I' [
} catch (Exception e) {4 o0 V& g, ]4 S+ Z/ N d- R: L
System.err.println("Exception updateLattice: " + e.getMessage ());
+ C* w: W) O, v0 k5 `& t% R }
r8 K5 f/ _, ]$ N
+ S |6 S" Y2 t8 t) V% I9 H# G // Then we create a schedule that executes the
+ j! v! q# k. s r* f // modelActions. modelActions is an ActionGroup, by itself it
% v. R' x; N" r# H: \ // has no notion of time. In order to have it executed in
$ R6 [+ S; R2 y4 m6 W! u, Y // time, we create a Schedule that says to use the
$ j: m# H& a8 f- c1 O4 z7 Y // modelActions ActionGroup at particular times. This. u. M+ M: E' Q- v' }; L" g8 @
// schedule has a repeat interval of 1, it will loop every5 ]/ [" B9 } l0 T4 h
// time step. The action is executed at time 0 relative to% L9 d9 _! W N5 S. I
// the beginning of the loop.
8 O2 d6 m% H8 }& J9 r8 U
' ^9 w w6 \. D1 \1 l // This is a simple schedule, with only one action that is
1 b$ `/ G1 I- J& U* h% v3 o // just repeated every time. See jmousetrap for more! M) h! `9 b* Q% r
// complicated schedules.
9 Q! K+ p% }( I( s0 @
& G2 t% X2 p' c' J modelSchedule = new ScheduleImpl (getZone (), 1);+ |( M) D: w0 f2 ^
modelSchedule.at$createAction (0, modelActions);7 E* K% j7 W+ }0 R2 ]) O
D- K1 F( H, `1 n return this;6 j" H: r- G7 b$ J2 h. H- Q
} |