HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 v7 X& N, ^1 X' [4 K0 Y" I
& |, K3 v+ |' ~3 A% ^! S public Object buildActions () {! x6 X$ T0 @% P( P3 L) M
super.buildActions();+ a w3 w0 Y' B! o1 {7 [
: o% E+ X9 c. ?% `/ ` // Create the list of simulation actions. We put these in
+ n G1 c& _, [0 B% x6 A: L // an action group, because we want these actions to be
6 F, T$ X2 J3 \+ t$ Q8 l // executed in a specific order, but these steps should' Y% k# T; Y2 S+ N
// take no (simulated) time. The M(foo) means "The message9 c. {. O, n- b# n! G3 E
// called <foo>". You can send a message To a particular
/ H) ^) J$ O( Q5 h3 u3 s // object, or ForEach object in a collection.
+ }% m; B2 m% M& U1 d1 {7 Y4 N/ k# Y F
4 s7 ~2 |* Q* y // Note we update the heatspace in two phases: first run
& U5 u+ ~+ ~; {/ t9 d+ r // diffusion, then run "updateWorld" to actually enact the
W8 I4 u+ U U" v6 i // changes the heatbugs have made. The ordering here is
; v4 Y! D( k7 q7 E, w // significant!
D$ D. k3 w: j7 F# ^
0 X% F4 o J9 a1 Z // Note also, that with the additional7 N; x# K& I4 f5 W2 Q5 ~+ N- X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" I6 g% L5 y8 @/ Q // randomize the order in which the bugs actually run$ z& {- c( z* H: R3 K* n: z" _
// their step rule. This has the effect of removing any8 u v7 k# C% r! R+ h
// systematic bias in the iteration throught the heatbug5 }3 a. D8 B2 K0 l+ r7 r- b+ L
// list from timestep to timestep
3 a8 N* C3 O* K+ @& t, R# N$ B2 C
5 Z1 s" z% A5 q8 Z% p // By default, all `createActionForEach' modelActions have* p2 j7 f( l. {/ h _
// a default order of `Sequential', which means that the
$ S A! D* M# U# h5 Z: y // order of iteration through the `heatbugList' will be
2 B" i- j5 i* x" P // identical (assuming the list order is not changed
, N: h6 i" D/ u/ r // indirectly by some other process).
6 a4 n# f6 w; `0 s : k0 {( \1 @9 P9 d# O* ^* E0 [( M
modelActions = new ActionGroupImpl (getZone ());
# @% l! i4 E1 A- O5 ~3 {
- Q! ~( ?( b. c5 \! ? try {
9 A1 q# q0 } y2 L) b+ p modelActions.createActionTo$message
# y+ D) T4 _3 G* ~# I1 q0 T (heat, new Selector (heat.getClass (), "stepRule", false));) f N0 ?7 d [: s4 o k0 ^
} catch (Exception e) {
5 f9 [& \3 Z: S6 g" m4 P% k System.err.println ("Exception stepRule: " + e.getMessage ());' [- d) Y* Z% Z4 ]6 N( C
}" L: z. X; p$ }3 _: I- ^3 s
; [$ x4 R9 w" H! i" @3 ]
try {6 `" B/ \8 H3 A1 d" x
Heatbug proto = (Heatbug) heatbugList.get (0);8 A3 Z: Y- @/ Y; L6 P& B
Selector sel =
/ p. }3 n9 I0 L' i new Selector (proto.getClass (), "heatbugStep", false);5 d S% m$ o" I( x9 G. c
actionForEach =8 l8 b# @/ M( i Y" ]# a
modelActions.createFActionForEachHomogeneous$call
9 j5 w8 F8 O% Q" L) c1 m) U (heatbugList,
8 b6 o- q2 `4 `5 C new FCallImpl (this, proto, sel,
8 U5 @% w: j' m new FArgumentsImpl (this, sel)));
$ ^/ J4 ]8 O5 D2 p4 [, H } catch (Exception e) {
4 m: x8 N; J1 T+ n8 Q e.printStackTrace (System.err);- W }/ C! s5 \ j; B
}" a( G- v# G S* \, }& b
9 n0 T! }( s# O# e/ p# B3 d0 k1 N+ Z
syncUpdateOrder ();
1 T! g, F3 l; y" P4 M8 [1 I
2 ]) n. _7 G: ^" M0 t- I* H try {
( A Y0 c' v1 S, x" W+ ^; d( Z9 P modelActions.createActionTo$message
' P7 C0 [8 H! w" @" C3 ?7 E3 f6 R (heat, new Selector (heat.getClass (), "updateLattice", false));
8 T" {8 R; B5 ]' d: B4 C8 Z } catch (Exception e) {
; E/ j6 L: S- T6 D% p* Q System.err.println("Exception updateLattice: " + e.getMessage ());% T; m. d9 i6 z5 ?+ D. q
}
: F( S; ]& H2 c9 L7 O5 c
! q( S5 _, h* r( \, M: O // Then we create a schedule that executes the
4 F4 K* B) ?9 F( ?: ~ // modelActions. modelActions is an ActionGroup, by itself it- \; l0 w ~9 d
// has no notion of time. In order to have it executed in
K; f J5 ]) a% ~ // time, we create a Schedule that says to use the
' D% \* j% _) Z // modelActions ActionGroup at particular times. This2 P. B, }$ i1 w
// schedule has a repeat interval of 1, it will loop every- ^9 n' n, J- n/ |; S
// time step. The action is executed at time 0 relative to
9 s2 Q5 g# m1 f! a, X6 j: E) V // the beginning of the loop.* g2 C4 ^) ~: R2 P6 m
' a- q7 f) m7 |" T! V$ f: d
// This is a simple schedule, with only one action that is& _) q4 D8 u; |9 e0 ?
// just repeated every time. See jmousetrap for more
1 y' S" a+ Z. N$ u // complicated schedules.
; N7 m8 m/ y: T- @8 Q - O! F" G: Q5 _& B8 ~
modelSchedule = new ScheduleImpl (getZone (), 1);
% w; M1 D0 I, `+ L- o modelSchedule.at$createAction (0, modelActions);. |0 H; ?- N; `* p# Y5 E7 x0 [5 V Y, j
! N' e; g, w0 Y& X return this;
1 W+ G! t$ ?0 m, n& a/ n$ w } |