HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 E& O1 g( c, V- Q9 Q+ q+ @8 [% r, F, ], H' s" t
public Object buildActions () {
) m# h" \: D; ~; [3 U super.buildActions();2 A C0 p$ J7 u! S. L
7 ^, M- t8 O; @7 V
// Create the list of simulation actions. We put these in
6 W8 r" X2 f' V. A* T8 ] // an action group, because we want these actions to be% Y- r- a$ G, d0 E
// executed in a specific order, but these steps should
" H! b* I6 h9 e7 U; S; a // take no (simulated) time. The M(foo) means "The message7 M0 Z% S. o& Q" C) Y; f3 m
// called <foo>". You can send a message To a particular- @% a1 n$ \! o( @ q2 m- i
// object, or ForEach object in a collection.
# z0 s& r9 X5 b) c* d * i$ M2 l4 e+ S- w
// Note we update the heatspace in two phases: first run: E" [+ h0 l3 b5 A, N; q
// diffusion, then run "updateWorld" to actually enact the4 @& i5 `4 T; a; x9 ~
// changes the heatbugs have made. The ordering here is
3 E: X% ?) \; e" v2 e$ k' t9 t // significant!, B1 r8 l1 f) ]3 w g
& [ d' y3 x: P0 A+ D8 _6 w
// Note also, that with the additional
9 q3 }5 F- N4 T0 B // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 N: n4 ~* q3 U7 j // randomize the order in which the bugs actually run( U. w2 I0 t; @0 l, g, p
// their step rule. This has the effect of removing any ?( k1 o; R0 y; b2 F6 _
// systematic bias in the iteration throught the heatbug
7 q* a6 j6 v7 I/ B // list from timestep to timestep
2 E- V3 [% X$ h8 ^0 x6 s - N$ a Q+ k& J, G: b/ @
// By default, all `createActionForEach' modelActions have) h: x9 d! q1 o$ ~* s" N. [ _
// a default order of `Sequential', which means that the1 Q4 c, v+ K2 z X
// order of iteration through the `heatbugList' will be% u2 H5 C5 ]/ E
// identical (assuming the list order is not changed
+ L; o$ _: p, m* h! j* b // indirectly by some other process).
- ~& q; Y j7 }$ E; o7 L ( }/ d0 i, B& ^+ b
modelActions = new ActionGroupImpl (getZone ());
7 l8 |; d$ r X$ F5 ?1 h! a& E1 L% i0 e. @
try {- T6 `, J+ C% y; J7 C3 f
modelActions.createActionTo$message
4 j* M# B& t0 i$ m9 P (heat, new Selector (heat.getClass (), "stepRule", false));/ l# W" F4 {' w: g% U" W8 Y
} catch (Exception e) {% ]$ h" L d6 i2 V; `+ Z+ }4 g
System.err.println ("Exception stepRule: " + e.getMessage ());
" @, Q( J. r: J }1 L, m: l+ Y+ T+ k- n
& G' F0 b# V$ L! n
try {
3 [' f! t4 d0 K Heatbug proto = (Heatbug) heatbugList.get (0);
4 s5 Y5 L( N- l7 ~# i! S Selector sel =
. c1 b; s: m/ C7 H new Selector (proto.getClass (), "heatbugStep", false);; y3 V% e& s1 P8 x1 h/ c2 W1 R
actionForEach =
1 ~5 g }1 V' b7 P modelActions.createFActionForEachHomogeneous$call6 e& d8 m- C# J3 n6 ?
(heatbugList,) ?1 D7 H' j$ k' ?# A
new FCallImpl (this, proto, sel,
$ ]3 v, s5 l8 s+ `+ h% | new FArgumentsImpl (this, sel)));
- q( C, f/ p" |1 J3 @+ R8 c } catch (Exception e) {/ U6 w$ ]5 M# |4 }1 e+ n4 O& U. o; G" _6 b
e.printStackTrace (System.err);& Z5 }# ~7 a& t$ U+ [5 y7 Q
}
4 a: S* [3 m* w- ^4 a! i
2 h( p8 u8 D. f5 `& r syncUpdateOrder ();! k" g c1 A- m' g1 u0 B5 D
8 M4 b3 W3 D' ?# e
try {
8 y1 S& l$ n* V) o' k; I/ ] modelActions.createActionTo$message 2 {/ c# j& O* U; E& W M
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 ~$ S$ `. Y% b8 d# L j) c } catch (Exception e) {
6 `9 J5 {+ }5 R6 [6 a; }$ K) S8 W' n System.err.println("Exception updateLattice: " + e.getMessage ());
% o/ r, @( S1 V B- C$ P q/ U }
! ?$ G& N! Y) e; y1 K
, P( S2 P! Z& h' v9 d: e // Then we create a schedule that executes the% h- ?- k+ p- |! ~- D+ Z- J E
// modelActions. modelActions is an ActionGroup, by itself it
1 z% p) ]+ S; x/ f# I- d. B // has no notion of time. In order to have it executed in
* C" s* r ]6 [3 q/ ~ // time, we create a Schedule that says to use the4 J3 _* O8 V- `! Y7 [$ f
// modelActions ActionGroup at particular times. This8 l+ @ n6 H0 @# @
// schedule has a repeat interval of 1, it will loop every1 Q p- z) `' I6 G: o7 j
// time step. The action is executed at time 0 relative to
0 R! G' B5 K% p0 ^; x3 d) U" N // the beginning of the loop.
5 C4 `: P- r' s$ w! j1 G4 |) A- P) \7 g! k( C+ ~
// This is a simple schedule, with only one action that is0 C0 d6 i- V0 I4 d% {
// just repeated every time. See jmousetrap for more
8 O: E; ]) ^0 j- u7 i: N& g // complicated schedules.
: T% ?, c5 l$ I5 d% Y+ S 8 B8 T. \3 I7 v+ C( {
modelSchedule = new ScheduleImpl (getZone (), 1);0 u( _7 Y- t F3 i# k7 C. @
modelSchedule.at$createAction (0, modelActions);0 {* [$ R) k; w! X
: S" e+ V" i$ v
return this;
1 s4 M/ m( O. e$ n: H) [/ B6 o; F } |