HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" k! O( E/ z9 I# v" P l; j, A5 a
x0 W3 `& g3 l4 T& Z* z9 E) w
public Object buildActions () {5 U/ F' O4 O5 R* p+ n; t7 b
super.buildActions();
3 F5 e, P! `3 @
' @* X- s7 Z( j" q+ O0 Q // Create the list of simulation actions. We put these in
5 I. S ^0 U" h; b0 X* d- _2 I0 y // an action group, because we want these actions to be8 `# c/ }$ a; Z! O% }+ r
// executed in a specific order, but these steps should
8 ]- f6 J9 F+ V' F // take no (simulated) time. The M(foo) means "The message: F3 Y9 R& |1 p: G4 W t
// called <foo>". You can send a message To a particular8 Z4 c7 S& |5 _* G6 G
// object, or ForEach object in a collection.! O/ {' e) W1 P! T% m* {" U
4 v _( k W$ F1 p) c // Note we update the heatspace in two phases: first run- {* y y, W* [) I, a
// diffusion, then run "updateWorld" to actually enact the1 T4 w% B d K* W
// changes the heatbugs have made. The ordering here is
8 @ u$ Q' f! V+ @( Y9 E // significant!6 q! [8 \0 U% Z4 B7 g# Y. s# u2 F
" D8 y r! d5 A. E# H( G: c3 H1 o2 c // Note also, that with the additional* C. ^+ u* q9 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 C6 P& d( P8 b
// randomize the order in which the bugs actually run
$ o, H% U. j3 O% I) _ // their step rule. This has the effect of removing any
5 Z9 ~' B, S' c" c // systematic bias in the iteration throught the heatbug
3 v. ~4 v& }6 Q9 \. ]/ i* I1 ]! g // list from timestep to timestep
- f6 Q) j/ _6 M' \* t
' b$ R. g1 A3 `1 g& l9 _ // By default, all `createActionForEach' modelActions have
s# i/ h( E0 |1 l8 _ // a default order of `Sequential', which means that the1 ?5 j' N. D3 ^, ]0 ]
// order of iteration through the `heatbugList' will be
- E' O7 L: ?8 L" A! M+ ` // identical (assuming the list order is not changed
+ e$ t# W; s/ R4 Q4 c# V. _ // indirectly by some other process).
( T, q" F0 M' X8 C: H7 }# e( W
$ F" B8 w$ h6 ^' }) e5 N) v+ Q modelActions = new ActionGroupImpl (getZone ());6 e0 ^$ ?+ D6 Y, l
) b( X' P/ ^: f! l! A
try {
- m/ o! E3 C! ^ @ modelActions.createActionTo$message
( x' z: g( v8 }$ w! c' i, Y; A (heat, new Selector (heat.getClass (), "stepRule", false));
9 M" ~9 A4 w; a P! ^9 [. G9 z } catch (Exception e) {
( B9 f1 M* d, D2 N0 X& G9 K System.err.println ("Exception stepRule: " + e.getMessage ());
2 H' l4 l, l; c }8 x, m [9 b, f( @$ {2 g
" O/ Z9 l% C* |; _( Y* Y0 n try {' B1 d9 V0 Q: e$ e- V$ O; Z* G
Heatbug proto = (Heatbug) heatbugList.get (0);' y7 u5 k8 t4 o4 \
Selector sel =
6 y% A, n7 J; z new Selector (proto.getClass (), "heatbugStep", false);
! k2 Y7 `9 O+ Q+ W. \0 f actionForEach =1 ]( p. t& N- @( [7 y8 i
modelActions.createFActionForEachHomogeneous$call
# I- b! R; v7 O# [ (heatbugList,
7 L0 Y- f0 c2 L8 V new FCallImpl (this, proto, sel,
, K+ p2 ^. w& ]8 x9 Q- ^# j& N/ _ new FArgumentsImpl (this, sel)));
/ [ e. [* I3 e( W; g } catch (Exception e) {& ~( \) ~& }+ q9 G+ @) h" I
e.printStackTrace (System.err);- W# G0 o+ t# n) f' ?
}
* W% b- U% |$ a2 ~. S+ G# N: e 3 g. {/ p+ z3 H9 h( m1 ^
syncUpdateOrder ();
9 c' Z: |8 m+ \0 b+ Q
/ {) H, B( f. r- q5 J. \ U try {
* B# \4 Z/ \& c# G modelActions.createActionTo$message
0 {0 n2 [6 s) f$ z% y (heat, new Selector (heat.getClass (), "updateLattice", false));1 A6 D% W! s* }" C& x
} catch (Exception e) {
9 Q* f0 u5 O4 i& R" s% O System.err.println("Exception updateLattice: " + e.getMessage ());- C. O$ S6 j* z9 r: N& v
}- Z+ N# j7 Q2 O, I3 M' L
4 B" B0 ~2 b U/ t; I1 l: g* P
// Then we create a schedule that executes the7 N* Y0 g& }" M0 _+ @5 |
// modelActions. modelActions is an ActionGroup, by itself it
/ _4 t1 V2 Y! q! m // has no notion of time. In order to have it executed in4 B9 M R+ y6 |. X. O: q& G/ q6 D( H
// time, we create a Schedule that says to use the
* ]" ~9 a. x4 R% z% r; ^9 i, R // modelActions ActionGroup at particular times. This
R# b( r: I5 m; A; W // schedule has a repeat interval of 1, it will loop every
. U, @0 B3 R! K* z' q+ h3 O // time step. The action is executed at time 0 relative to: O$ n9 [ ]0 E+ R7 Q
// the beginning of the loop.3 y: @) [8 ^% z% R% m$ t, @
! m3 l* [! j8 M, ?: a // This is a simple schedule, with only one action that is( _8 A [# s' ^' s) a0 D* |
// just repeated every time. See jmousetrap for more
3 n7 p: h7 H, R8 a4 { // complicated schedules.
* _* n4 t! y# ^0 X0 _) G( G4 J ]
$ h3 @9 T4 t$ d) W2 a modelSchedule = new ScheduleImpl (getZone (), 1);" I! ~# o* \- B0 U
modelSchedule.at$createAction (0, modelActions);7 x) d. M& |+ Z+ v: z2 N; T
4 @% B z/ n5 l& }* D return this;( ^1 o& L: U/ H3 H4 D
} |