HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, W9 M( w' \* A3 c; o
! A# |; J$ A* r6 p6 ?
public Object buildActions () {
2 X! ]- h5 u P" f4 {- M super.buildActions();6 C: ]0 y( V# e
8 F# `8 q) B- E) Z' X) S
// Create the list of simulation actions. We put these in, R0 S1 e- r) A& N
// an action group, because we want these actions to be
% ?0 e# V- U1 W5 T2 o% M // executed in a specific order, but these steps should
! ?( t4 }, M8 M4 w( T // take no (simulated) time. The M(foo) means "The message+ Q$ P' K( O" z) G+ R
// called <foo>". You can send a message To a particular* S }/ e# j9 G: N
// object, or ForEach object in a collection.
& v( ?7 Q7 n" j, E
6 R& S& [& w/ T% s2 Y7 j // Note we update the heatspace in two phases: first run! F+ V7 t+ J. }6 }0 S( O
// diffusion, then run "updateWorld" to actually enact the8 Y: x) A. p2 }7 S
// changes the heatbugs have made. The ordering here is. A! i- R" X/ ~5 ?) o8 Q5 ^5 H7 {
// significant!8 |3 I2 h5 j9 }3 ]
$ G7 `9 J& |4 z6 ` B4 ~( x& h // Note also, that with the additional; O" K/ C& W' o9 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can, U7 q+ F9 |- Z0 t
// randomize the order in which the bugs actually run
; `4 q5 Z8 s7 {; ^* v // their step rule. This has the effect of removing any
% D' M3 f" u7 \4 ^3 J+ @ // systematic bias in the iteration throught the heatbug6 ^+ I9 y& ^9 D5 G8 L, P
// list from timestep to timestep
2 R) l4 K. S" ?0 i4 ` % D Z" R7 v- _. \( ^$ w% c# b
// By default, all `createActionForEach' modelActions have' S' s5 B- n% d% O: k6 f R7 u4 d
// a default order of `Sequential', which means that the0 f' f$ ?, i) K4 l' W& a
// order of iteration through the `heatbugList' will be5 Q, K% h' m0 q, v" e
// identical (assuming the list order is not changed. f+ }5 Y7 Y9 W- C
// indirectly by some other process).
' }" o* S/ V2 s6 D2 K4 B+ G 0 f* V8 i2 r' v% M# \& W# y# u; u& X
modelActions = new ActionGroupImpl (getZone ());
: z9 g* G' Q) T- T3 A" `2 E( Q
( l6 e- p4 c4 H" X" ~ try {
- ]. ~! ]' b: @6 o modelActions.createActionTo$message8 ?) @6 C( S, H6 S1 d1 k% Y% ?" e
(heat, new Selector (heat.getClass (), "stepRule", false));0 g4 ?+ E* A* l w! U# h: c
} catch (Exception e) {* z* N& k& C! E8 t
System.err.println ("Exception stepRule: " + e.getMessage ());
5 n& `- M6 B3 f' o2 s u; [ }) [+ r. E8 O; s" K7 {) W
6 }6 U! S% l' y0 v: @ try {
2 G) x R5 n* U# t Heatbug proto = (Heatbug) heatbugList.get (0);% u, ^* E5 X" P8 |
Selector sel = ) d8 A& @; O9 ?
new Selector (proto.getClass (), "heatbugStep", false);
. F: N0 L \6 \, s6 `. n+ W4 h actionForEach =
! s* [" `! n2 U0 q; |7 s6 y3 z modelActions.createFActionForEachHomogeneous$call
5 G$ h) \5 q" M, P- i& ` (heatbugList,
6 J, i# g7 t% q new FCallImpl (this, proto, sel,
! h6 G' G5 l& \' n7 P8 f' ^% ` new FArgumentsImpl (this, sel)));
4 ~5 W ~: X& q$ ?8 I8 z- y: [ } catch (Exception e) {
5 Y' d& @8 d8 U e.printStackTrace (System.err);
, D! A: b: L v1 \ m ? }
7 L% B' o3 a& q
+ x+ v7 G, v1 ^) U2 m% X) y6 m syncUpdateOrder ();" E T, u# B9 i- E& E5 E
2 ^( x" Z9 p: X$ h* |5 x, N: @# J try {
+ o; N6 M) d* a6 v' ?0 B1 B modelActions.createActionTo$message 4 ^" E4 E6 r/ Y* d; ~5 J! U: G
(heat, new Selector (heat.getClass (), "updateLattice", false));8 C, E1 W+ y+ F) e, A T, d
} catch (Exception e) {
" G! m0 M( u! g$ T System.err.println("Exception updateLattice: " + e.getMessage ());3 u: L. h n% d: A" c9 ]0 Z
}, P2 }4 A4 [6 a# \
7 R( o& H7 ^) ] // Then we create a schedule that executes the* M }9 C1 N4 s9 W7 ~% F3 R) t
// modelActions. modelActions is an ActionGroup, by itself it( d$ H+ J* m. f, G
// has no notion of time. In order to have it executed in; c* C' O# i2 D+ Z# ~- ^5 \1 ]
// time, we create a Schedule that says to use the
# |5 G6 k. O7 J6 M. W // modelActions ActionGroup at particular times. This
7 Z# H) R" @3 Z! K' S( i // schedule has a repeat interval of 1, it will loop every
: }6 r0 [3 p% R2 _2 p2 I& v7 [ // time step. The action is executed at time 0 relative to
: x3 T$ q- Y! \ C, w( E // the beginning of the loop.
7 d4 h$ s `7 k. i& r
, \% U Z, b5 B1 x, i // This is a simple schedule, with only one action that is
( y R3 r; u/ w- | // just repeated every time. See jmousetrap for more
5 {6 ~" T9 o) c+ r E# R // complicated schedules.
+ F# k3 p) `8 y% D, I( \
# I$ }3 J# ?+ |+ g3 ^6 o modelSchedule = new ScheduleImpl (getZone (), 1);
8 Q7 F G, N, z' ~& O modelSchedule.at$createAction (0, modelActions);6 G! a+ |* E1 x, u& m j# c
3 s, L1 ?- f3 d+ V) X7 E1 L' A return this;" P3 H8 M& x4 n( [5 `3 {
} |