HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 j# {' W) v* l7 h/ O0 I) f; K: z9 M
public Object buildActions () {
1 s7 E6 m8 ~% {2 `- a super.buildActions();* W5 N6 s9 {( s; W3 f) h
! @! A( Q. p3 K6 e$ R // Create the list of simulation actions. We put these in
; e* s) G& h7 \- o3 r# i4 s // an action group, because we want these actions to be
% w4 k' w! i/ ]& r$ f // executed in a specific order, but these steps should7 s2 T3 l8 `9 H6 I3 z
// take no (simulated) time. The M(foo) means "The message) n- k0 S4 K4 Q1 @
// called <foo>". You can send a message To a particular
5 j' G" H7 b! g$ C% m" V" F( N* X // object, or ForEach object in a collection.
4 E' X$ G' d/ \, r. t4 e6 F$ s
: x1 J$ `: L/ j5 C // Note we update the heatspace in two phases: first run
k9 e% @1 D4 C( P // diffusion, then run "updateWorld" to actually enact the
) h& r( Q* `. y" E' `4 P$ a- o2 Y // changes the heatbugs have made. The ordering here is
6 S- }% G- I) j( r // significant!
7 m3 ]& Y6 S+ q8 N @+ x* h
) ?% h5 y5 X- m) E // Note also, that with the additional. k" j3 K' ~; S5 E% b
// `randomizeHeatbugUpdateOrder' Boolean flag we can* o: j: T% o$ u1 ]1 N
// randomize the order in which the bugs actually run
+ v% n# V+ x* O* ~2 } // their step rule. This has the effect of removing any, c% _# N: @( M( |; P
// systematic bias in the iteration throught the heatbug
1 @# F+ E/ [! |% i- S6 ^ // list from timestep to timestep4 b& n* |% Y3 m' S( `% b
* @4 \; L$ Q [. ^& m; A7 n! t // By default, all `createActionForEach' modelActions have
" e) h. _* b# Y* k% T S* G // a default order of `Sequential', which means that the( e$ s% `9 _/ Q8 P
// order of iteration through the `heatbugList' will be
5 L, d6 h$ w& U% v" U( i- A // identical (assuming the list order is not changed
U/ S+ L) z! Y1 p* w2 A8 t% X // indirectly by some other process).
s- e0 p: Q1 X F9 }
5 }, P0 X/ l& ?" Y/ [' p! _ modelActions = new ActionGroupImpl (getZone ());
/ P3 q$ L: m( s! p
+ A; Y# P8 L0 `; b+ A try {8 ~& a- \5 N2 [7 S$ K
modelActions.createActionTo$message, r6 q, q4 |# f
(heat, new Selector (heat.getClass (), "stepRule", false));
$ h- ]. }" j' T4 p3 ~) x1 G } catch (Exception e) {: n# i1 |) x. G6 n/ ?
System.err.println ("Exception stepRule: " + e.getMessage ());
0 ~# V' Z8 q3 @ }6 V* j: a5 s1 D
0 _0 t8 M8 C+ ^' |6 [
try {
$ ?: Z, {6 e, X Heatbug proto = (Heatbug) heatbugList.get (0);6 }$ Q3 l: e- F& a
Selector sel =
* u. w" `7 B: J" c2 \/ H) x new Selector (proto.getClass (), "heatbugStep", false);
V" s1 g6 o" ~9 Q, X3 T& w7 b1 x/ R) o actionForEach =& L0 E& ]- B0 Q) r, ?$ }; q- c
modelActions.createFActionForEachHomogeneous$call
$ J/ C# B+ P7 ?! @5 l9 ] (heatbugList,. m) A6 N3 J7 N' o" ?( @" q
new FCallImpl (this, proto, sel,0 h6 |2 Q3 f* p4 `. n
new FArgumentsImpl (this, sel)));
6 ]/ {8 g$ Z- c, q } catch (Exception e) {& Q, s+ L& ~, r5 Z1 f8 F2 H
e.printStackTrace (System.err);
0 E. @" g6 {# ^% h% h% Q0 l }
: _2 _1 {' p# Y- c
8 X! n3 w0 ?8 [2 f syncUpdateOrder ();) K& Y5 P+ [+ l) T+ H& _# Z
3 ?( h" q& H: Y8 q5 b% V4 q1 G try {/ L+ l; @6 E8 D+ o' `% e: s
modelActions.createActionTo$message
+ d3 c: ^$ X! E (heat, new Selector (heat.getClass (), "updateLattice", false));8 `1 X/ U* B" m" u# G' ~' \' X
} catch (Exception e) {, u5 D) \3 W& m$ h9 N: e$ f
System.err.println("Exception updateLattice: " + e.getMessage ());" j0 L' y0 [# u' G: R+ {
}
! w0 t# _5 Q" c# s F$ F
4 y6 v+ J C' ? // Then we create a schedule that executes the
0 n& s: m" ?0 r7 E7 K0 l& t3 L // modelActions. modelActions is an ActionGroup, by itself it
+ J' l$ l; X+ S8 B) p: I // has no notion of time. In order to have it executed in
8 \; G7 y5 Q' X. x( ?1 F) e // time, we create a Schedule that says to use the$ @4 w& |. }# x& U
// modelActions ActionGroup at particular times. This* P! Z! D$ V( V# \3 _' z
// schedule has a repeat interval of 1, it will loop every$ Y- S0 F0 v: @# ]5 m- |. d% B J
// time step. The action is executed at time 0 relative to1 h8 ]8 X) n( Y
// the beginning of the loop.. K. d% E" x/ V5 Q+ j M
; J' a& e5 L$ G* [0 b& O* M
// This is a simple schedule, with only one action that is- ]6 p/ y% g$ B6 w
// just repeated every time. See jmousetrap for more/ c% H0 G3 d; {/ L
// complicated schedules.
) Z8 C1 z, i* \( y& G 4 P; p' Y+ A: p( Y
modelSchedule = new ScheduleImpl (getZone (), 1);1 C# C0 A. |. X/ n# }
modelSchedule.at$createAction (0, modelActions);
# |5 ^* }2 @3 o$ U9 U* w. c% f. z0 Z " U9 b% p' `1 s, k4 u! y
return this;6 ~# h. ?# A% |. L1 {* U+ n# x* ~
} |