HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% R& w) q7 @9 z# h% ]9 a, J
: w5 @; R' U. Z( w1 D
public Object buildActions () {6 n& v' D* K7 d' l
super.buildActions();3 K; j- G9 d% O7 R( }3 X
- H* S; O8 E0 T+ f5 @9 v$ _
// Create the list of simulation actions. We put these in
3 I* B; }: B9 e, F9 O+ o // an action group, because we want these actions to be
6 }9 u" x! z, H- K // executed in a specific order, but these steps should+ z# q$ E2 E$ I7 o
// take no (simulated) time. The M(foo) means "The message, t' Y5 y5 u6 W, I c- F
// called <foo>". You can send a message To a particular, R2 B# M8 q4 e
// object, or ForEach object in a collection.
7 u/ M/ Y( s8 a7 u1 o k
; X# I3 n. Q$ \, c9 r* o# ^ k // Note we update the heatspace in two phases: first run+ Q+ t: M2 X3 b: b
// diffusion, then run "updateWorld" to actually enact the
8 Z" W# ^ j/ V" f% o d // changes the heatbugs have made. The ordering here is
6 p. M; t7 _; Z/ r8 v // significant!3 o1 I+ m3 w9 X4 B/ G6 w" c. f
' A" R2 a1 Y7 @
// Note also, that with the additional
* \$ H* W- F/ F+ p: b5 _8 b // `randomizeHeatbugUpdateOrder' Boolean flag we can$ w, W+ d, ]# j
// randomize the order in which the bugs actually run1 W3 v& |, S7 N# B; P! v5 @: `; }3 w
// their step rule. This has the effect of removing any I: r& R6 H' ^6 f \0 S" N- S
// systematic bias in the iteration throught the heatbug
( `. v! d. I5 i2 X6 j // list from timestep to timestep
9 Z+ T& k: v+ t4 J. `# N
$ [2 Z2 t! z ]2 N/ U; c6 ]7 B+ H // By default, all `createActionForEach' modelActions have! S" L+ j: C' b' w8 l
// a default order of `Sequential', which means that the
. M. P3 q0 |, o# u/ n. H# Z2 o // order of iteration through the `heatbugList' will be* W% z+ J! B# ?/ U) O7 R- C
// identical (assuming the list order is not changed- Q. ~8 K$ Z! [/ S. Z C3 N
// indirectly by some other process).( t, D' P& E' u1 U8 F
$ F9 j, Z2 E( X. u2 O: {7 H modelActions = new ActionGroupImpl (getZone ());
- h5 J6 W0 `( P5 ?- m
4 `* ]# f5 T; B& {$ V, `5 Q try {
7 Q% @2 b8 H( \ d( k modelActions.createActionTo$message
7 o' F, L- @8 F* x: |) v (heat, new Selector (heat.getClass (), "stepRule", false));
( H2 |! O t) \ } catch (Exception e) {
& U$ Y& y$ m% m @: Y4 J( f% N System.err.println ("Exception stepRule: " + e.getMessage ());
* Q) k5 [ J$ @ }% I3 R% J% H4 x8 Q: M9 k) Q
4 F" `- L' ?0 u& G f2 U try {6 Y5 K" V* Q9 u* g) E
Heatbug proto = (Heatbug) heatbugList.get (0);
[4 u7 H0 Y9 t. Z$ G$ v Selector sel = * F/ ^8 d) _- z, H9 l
new Selector (proto.getClass (), "heatbugStep", false);
6 a# O0 q* l3 r/ P/ `8 a/ n- @ actionForEach =
0 {1 z- V6 C7 j! s9 j x2 U modelActions.createFActionForEachHomogeneous$call
3 Q6 |) r+ }' Q7 s5 b M (heatbugList,
/ s- ]/ w Z; X2 p5 x new FCallImpl (this, proto, sel,
6 ~/ X2 M. A8 y1 _, R+ P0 q9 C new FArgumentsImpl (this, sel)));$ a* B- l6 H5 P8 X
} catch (Exception e) {
9 o. g$ Q) w5 U3 ^) Z0 C e.printStackTrace (System.err);
' ]: U+ O1 Z O" M. F) r }
: J; L7 B' r. u+ R% n
; X* q4 o2 G1 E& L% r syncUpdateOrder ();
, ~: C$ n0 X( p1 S p, T* h0 l8 K. K5 x9 Z! X" m9 |
try {
. I7 L& Z# e+ n0 c+ R modelActions.createActionTo$message & `$ [( `" [+ \3 F% B0 m! O
(heat, new Selector (heat.getClass (), "updateLattice", false));: [! O+ D1 E7 U1 S9 @
} catch (Exception e) {
* d( `, h0 H* g9 c2 L2 c4 O- C System.err.println("Exception updateLattice: " + e.getMessage ());
$ ~+ v, a/ t4 s8 t. j6 C, a' S }# Z& B# Z$ {# y; r
! x0 l0 G3 h/ V0 r: \0 E
// Then we create a schedule that executes the
6 v1 n# m0 g5 o$ E$ Y" e) }: B9 A# j // modelActions. modelActions is an ActionGroup, by itself it+ _1 I! p& T8 Q d/ B/ }
// has no notion of time. In order to have it executed in
# i+ i* D( O) W9 }0 n0 P3 |! f4 k. Z // time, we create a Schedule that says to use the+ R- P6 W/ \) H3 T; N+ I
// modelActions ActionGroup at particular times. This
8 Z- l) Q3 H3 f5 J2 y // schedule has a repeat interval of 1, it will loop every
3 u `' E4 R- \) O // time step. The action is executed at time 0 relative to* N+ T$ _# B6 s9 c
// the beginning of the loop., O7 h. u: J, o% l+ q
$ z& N J* B/ Q# j: Z2 h9 B2 F
// This is a simple schedule, with only one action that is
# ]! m5 }5 }5 T4 I* {$ e // just repeated every time. See jmousetrap for more; W) A( b7 o X6 o: j7 W
// complicated schedules.
1 ~3 N) V4 o" d4 Z; R: M
- G) R+ t* `& Q% f modelSchedule = new ScheduleImpl (getZone (), 1);1 f& x6 A! \- T2 S$ s `3 `
modelSchedule.at$createAction (0, modelActions);( @3 i0 U4 ^; z a; c" I
+ i2 `( W* ?. X2 \9 N+ D' x' J
return this;
! c6 ^) m0 c$ A9 _, }2 p3 k+ y } |