HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) C. e. \$ |% }1 z/ [
! i; i- P- ?* I4 q% d& z
public Object buildActions () {
+ D3 K. _( A9 y/ j1 n- F9 u. i super.buildActions();+ U" f* F( e# a3 R
7 K' ^: z9 N# `; V+ N4 k // Create the list of simulation actions. We put these in
0 a" v7 I) W# q# W9 i U8 f // an action group, because we want these actions to be
4 m- Y" M ]9 u // executed in a specific order, but these steps should
9 [% ]7 [& p, a" L* ^ // take no (simulated) time. The M(foo) means "The message
' `! s* ]2 D8 }! L7 s // called <foo>". You can send a message To a particular! L \3 [& w9 ]8 }" t) d
// object, or ForEach object in a collection.& f2 e& S1 t& t! K
; u/ v. C+ f: }9 t8 q
// Note we update the heatspace in two phases: first run, w5 H# {+ r$ J5 d* t; P
// diffusion, then run "updateWorld" to actually enact the p/ }2 W( O2 C1 g/ c: m
// changes the heatbugs have made. The ordering here is- z. w# p; ?5 v! i$ P
// significant!
9 ]7 r' K* B) }4 U# T9 @ 0 r4 q0 z x! W- O* V7 ?" e! P6 L
// Note also, that with the additional/ y/ b- e$ I% b/ T: j, v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, V; f6 y3 @& e // randomize the order in which the bugs actually run
4 `9 |% P: t w/ L' g // their step rule. This has the effect of removing any
+ g3 @! c, d! w W$ r // systematic bias in the iteration throught the heatbug
7 f. U$ y. I# h9 v1 t4 ^, | // list from timestep to timestep( T+ {0 I2 g. P
- h P5 w& y. b3 D0 h8 A& y // By default, all `createActionForEach' modelActions have7 |/ w1 W) x& z. ^, R0 `
// a default order of `Sequential', which means that the1 r d6 Y3 V( F: d, S6 U
// order of iteration through the `heatbugList' will be; p5 [" C4 z4 i
// identical (assuming the list order is not changed
) }# k4 Z; _$ W h2 U8 \ // indirectly by some other process).
- {, K; [2 m/ U/ J' k, W! V
6 L3 h, F' W; T/ b6 [ modelActions = new ActionGroupImpl (getZone ());
9 G4 }$ L* \+ |0 f+ W6 X8 ^+ f! \, H! D+ v
try {# Y+ s9 C4 i1 R: Z
modelActions.createActionTo$message" j- G+ Y+ `" B3 f
(heat, new Selector (heat.getClass (), "stepRule", false));
" q* d' I7 p |+ H; b } catch (Exception e) {
) }2 P4 n) T! G, v+ y8 f7 `3 Y System.err.println ("Exception stepRule: " + e.getMessage ());
" k& R; o! ~. q1 V. h }/ [/ s' ?& H4 }7 s! P; ]6 Q
/ x9 ]6 B! t9 M! a) i
try {6 a8 D" P5 c# a
Heatbug proto = (Heatbug) heatbugList.get (0);, W: _6 k G3 i( w. I
Selector sel = 3 `, Y# Q0 O: ?$ h2 b3 @& t
new Selector (proto.getClass (), "heatbugStep", false);. Z) `, k. I) A& f/ c
actionForEach =! V9 V. \ I% i1 |% V2 J
modelActions.createFActionForEachHomogeneous$call& a: x* S5 o+ }& q9 X$ Y m
(heatbugList,
& j4 u) X9 l" T- C: [. V new FCallImpl (this, proto, sel,
7 g1 C! m: B) Y+ q: l3 C, P9 v$ U. P new FArgumentsImpl (this, sel)));
r$ W( b3 I J1 n) [' l7 r$ U b } catch (Exception e) {
3 r) k. {7 h# @; a e.printStackTrace (System.err);- A7 V6 v5 Q1 v- C
}
I9 N: W- _& Z$ `( F
# l8 V( L7 Y5 T1 g& N1 Q& h syncUpdateOrder ();' i) h! w6 s1 p/ r( D: L. k! P
5 G& a6 c4 r& ?3 U1 b. E6 H try {( e1 ^, S2 e* O& e
modelActions.createActionTo$message
5 U6 e) ~9 F5 Z2 `$ c8 L (heat, new Selector (heat.getClass (), "updateLattice", false));6 P' X0 ]9 j5 R2 y
} catch (Exception e) {
& K6 f& s5 z* I. O2 T System.err.println("Exception updateLattice: " + e.getMessage ());+ {, ], t8 Q t
}
# {# s( {. z: ~3 ]/ z 9 t8 g& }# V- Y, ?5 [2 G4 C
// Then we create a schedule that executes the
* I. }: |/ f. { // modelActions. modelActions is an ActionGroup, by itself it
, H8 S: U- s9 K( z& C // has no notion of time. In order to have it executed in+ ], v5 p$ b6 M4 u
// time, we create a Schedule that says to use the
0 E. W, Q. b9 l% F. ~- v) I& K // modelActions ActionGroup at particular times. This% }1 q7 F2 X& @4 z
// schedule has a repeat interval of 1, it will loop every% i7 c( X; @6 J$ }0 c7 n
// time step. The action is executed at time 0 relative to' N- J# d2 }) X
// the beginning of the loop.
$ d( i& v3 S9 P+ H- \1 j' A2 Q
8 r6 i- t0 r5 w0 c Y/ e0 H // This is a simple schedule, with only one action that is
+ Y" l8 W9 O+ D4 e // just repeated every time. See jmousetrap for more
) Z4 y& ?3 J2 @: ~/ E4 w1 B3 ?% } // complicated schedules.3 \9 J( Q# f( u8 Y" h
4 h) U7 h0 }+ r5 S
modelSchedule = new ScheduleImpl (getZone (), 1);% P, T) _; U! Q' Y5 \8 H8 O
modelSchedule.at$createAction (0, modelActions);2 N* r& v; X4 d/ I
0 l. Q3 B. @6 V9 `1 n return this;( k7 n' H( K2 n! [9 a3 C
} |