HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 X9 y) [* c7 O4 R+ }* [# `
- j- p( @5 ?0 `& i2 D2 l t+ C5 }1 F public Object buildActions () {7 j# x5 ?" G$ g' i6 g( ]2 i
super.buildActions();1 M" g9 S! `& h0 l) T" D5 `
0 p# J6 c0 c4 X9 S0 ~% M6 { U! }
// Create the list of simulation actions. We put these in. k! c; P# ^1 j& H/ X
// an action group, because we want these actions to be- p! ^0 c9 w" A3 o, F. q- N# K
// executed in a specific order, but these steps should q H( d% x3 Z# V
// take no (simulated) time. The M(foo) means "The message
; }! k+ y) t6 D7 l5 t% P // called <foo>". You can send a message To a particular- ^4 W+ e. f G! ]( L
// object, or ForEach object in a collection.& @# t6 w9 P. |, T
3 k6 I6 l& Y5 r: A$ v; K2 G // Note we update the heatspace in two phases: first run8 b5 T- S: q- p4 J
// diffusion, then run "updateWorld" to actually enact the( R* T" d2 `' J n, i; W; M* v0 v
// changes the heatbugs have made. The ordering here is1 i# ?0 S9 ~7 Y% c
// significant!1 e0 ]- Q2 p7 m& H/ Q/ Z; M
/ j/ Y. ~9 `; e# C9 x5 F1 ?
// Note also, that with the additional4 O$ T$ D& \" s4 W
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 @* d G d; G; |) R
// randomize the order in which the bugs actually run
! g' k H% V) s# o // their step rule. This has the effect of removing any8 D. M& I9 i. s0 Q* O
// systematic bias in the iteration throught the heatbug
8 [- A3 h9 y! \/ q& D: l8 g // list from timestep to timestep9 F2 a, i1 b1 d4 n9 l/ j
- Z; W7 Z& E }. T! I% d3 ^; P. t // By default, all `createActionForEach' modelActions have& _" J8 O% S- Z: B, G( s
// a default order of `Sequential', which means that the/ F( ?; {7 R9 b' ]/ `
// order of iteration through the `heatbugList' will be% y9 Z/ r4 Z, F- k
// identical (assuming the list order is not changed, [7 ~4 `$ @3 ]; s/ }4 m/ g9 |9 O* e
// indirectly by some other process).5 @2 O, K M5 ~5 p/ g8 u" l
+ q8 K' V0 p+ h* y% M. v
modelActions = new ActionGroupImpl (getZone ());
4 d3 v7 I/ f8 ~- l% t9 _$ S* @1 E1 V8 k( K7 p
try {6 z E# J/ d5 w- x
modelActions.createActionTo$message
/ Z- M6 K$ u2 x' x0 D* ~: } (heat, new Selector (heat.getClass (), "stepRule", false));
. ?* m( \6 E/ J0 M4 z; C5 e1 c } catch (Exception e) {
/ A" j8 t/ {6 I7 z) d System.err.println ("Exception stepRule: " + e.getMessage ());7 D2 D. i8 k# Z& n
}6 t1 h: O5 ?, M* U
8 n# c0 K" p/ _, F try {
7 G# Z8 v$ |7 ^, U, u! N Heatbug proto = (Heatbug) heatbugList.get (0);
9 a' T! y1 Y- r9 e3 E9 o( B Selector sel =
0 X9 {8 h9 w0 h0 V) l. D0 C6 A new Selector (proto.getClass (), "heatbugStep", false);: P$ H" A4 L9 v3 y# ~6 B. e
actionForEach =
9 P L: C( u5 k; l modelActions.createFActionForEachHomogeneous$call- |4 q& M* D) N4 I% G" v
(heatbugList,9 H! ~# H/ d1 X( d6 J
new FCallImpl (this, proto, sel,
9 s- A- ?$ w/ M! z new FArgumentsImpl (this, sel)));
9 _! e, e$ r$ a+ g+ X } catch (Exception e) {( o* ^4 u2 I( Q6 w* G8 q
e.printStackTrace (System.err);
1 c; e* H4 i2 P! m }; x- |. n; X, t2 \, z
* Q; A4 N( l. u
syncUpdateOrder ();
0 R' ?: O7 n- E0 a0 Y; X* Z f" S6 q; d' ?$ J$ M; h6 }( j; O% b7 M$ x
try {5 v6 @7 U( o( o. N$ K. X
modelActions.createActionTo$message 8 M: ~* l; ~* `$ \( Q. {
(heat, new Selector (heat.getClass (), "updateLattice", false));& F. R4 U% R. s- p+ @6 M! j ]) v% N
} catch (Exception e) {; z7 v. j% \: g6 t
System.err.println("Exception updateLattice: " + e.getMessage ());
$ B2 b: @4 }8 K }
$ K" c; e* t8 I+ @# M8 H
# h+ n. \1 p& c; W+ t* b9 X // Then we create a schedule that executes the
3 }" o) P6 |" h7 z9 ~* ?& C // modelActions. modelActions is an ActionGroup, by itself it* V+ t! L: t( N: O5 K) U, N9 c& s3 P
// has no notion of time. In order to have it executed in5 y3 a6 z! F5 t0 e3 h
// time, we create a Schedule that says to use the& V) G' m2 m7 X
// modelActions ActionGroup at particular times. This' ~. `6 c# C- q
// schedule has a repeat interval of 1, it will loop every
& ^) K( c6 ~8 V* S( Y( ^7 O3 T5 m // time step. The action is executed at time 0 relative to
9 I2 ~7 Y1 X9 J0 `) k // the beginning of the loop.
% @3 d: i1 @1 e, f- K% j3 X; \# {1 H
- ]4 g% }( T0 Y i' U+ A. M // This is a simple schedule, with only one action that is4 Z: l) o, X, w# f. r3 u
// just repeated every time. See jmousetrap for more
o; G1 _6 {1 K& b! d // complicated schedules.
# r$ a& c+ ~( b
- F: H1 i# m* e) v' c( b modelSchedule = new ScheduleImpl (getZone (), 1);
$ Z/ `! Y, i2 {8 c modelSchedule.at$createAction (0, modelActions);2 `) h8 v1 d0 Q
" n0 n N2 @ L return this;
. D# N' Y2 y, s9 o6 U } |