HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 _) w6 A5 H- p; C! L. o
' j1 W M# `$ S1 V1 O public Object buildActions () {
& N) U1 h& S# @, H( b, @0 W super.buildActions();/ a# z/ r: ]" ]2 M# b2 r" e9 [$ [
9 d2 V0 p0 T5 H
// Create the list of simulation actions. We put these in) r* |6 ^9 d& f. n# s: p
// an action group, because we want these actions to be& j' o6 C" \& @- k5 M8 ^
// executed in a specific order, but these steps should0 K! R' N+ n6 p) s! b
// take no (simulated) time. The M(foo) means "The message
2 n( G: d! p% {& X& u9 V // called <foo>". You can send a message To a particular7 X1 K7 i k2 {- e
// object, or ForEach object in a collection.
) ~( O, {+ W9 X$ W6 y; y6 O
; N& X6 C- k* X& O# R' ~1 S6 C // Note we update the heatspace in two phases: first run
9 o, c4 s0 {0 z P1 p) A // diffusion, then run "updateWorld" to actually enact the6 }6 C* \4 A6 w! o2 u( i1 B
// changes the heatbugs have made. The ordering here is+ K, v) i% _- Y7 Q3 r
// significant!
6 B5 M5 B8 t G! C! l# M# \% i
8 N4 x9 K4 B7 r+ c [ // Note also, that with the additional
. D5 `7 k6 H& j: ~8 w @+ |- e // `randomizeHeatbugUpdateOrder' Boolean flag we can) S: N2 z4 M5 B- v
// randomize the order in which the bugs actually run
+ H. k' }# Y! w // their step rule. This has the effect of removing any
6 n1 r' p; x9 n$ I2 P- e // systematic bias in the iteration throught the heatbug0 {; h" i$ c) K
// list from timestep to timestep" `8 T% t' J8 W- K6 M
0 c B* j7 t2 @1 c, } // By default, all `createActionForEach' modelActions have
' m0 W! v0 Y: ] c // a default order of `Sequential', which means that the
4 _9 x7 I& v) l! M // order of iteration through the `heatbugList' will be
* n+ }& u/ Z9 M5 G* m$ a // identical (assuming the list order is not changed
( t4 l; z+ O0 d* I // indirectly by some other process).' [& W# q* ~/ g s* A) C/ w
5 _4 x( L/ Z) `* V# X- b# z c
modelActions = new ActionGroupImpl (getZone ());
0 M- \: \) z6 R# \% w \
1 `$ J1 R0 E2 S try {
+ o; T: ~# X/ I l' D" C modelActions.createActionTo$message% M2 ~3 |: U) A7 F' a% Z: I4 O, w$ t
(heat, new Selector (heat.getClass (), "stepRule", false));
( {: U3 Z3 _: i8 s8 o; T7 ^ } catch (Exception e) {
* c8 L- j# D5 I" e, S System.err.println ("Exception stepRule: " + e.getMessage ());' c9 V- D, Q% z$ V0 J8 x) w( l
}
& d, ^7 | t9 [9 T) a' P2 P8 R4 ]; x+ ^! H7 y
try {5 R' `# e4 Y, X
Heatbug proto = (Heatbug) heatbugList.get (0);
" T4 w6 ?( e: ~. ` Selector sel = 6 f C; Y* w2 i: x
new Selector (proto.getClass (), "heatbugStep", false);5 M: W- u/ K$ ?: m
actionForEach =7 `4 F- W/ B) j6 \. A
modelActions.createFActionForEachHomogeneous$call
2 {- O/ ^1 c n2 ^5 O4 c (heatbugList,
# d* c8 W) D. z+ j new FCallImpl (this, proto, sel,
$ S" N8 [! |& v! c G+ \- p new FArgumentsImpl (this, sel)));
+ }$ ^4 n& l# q } catch (Exception e) {
5 S6 x- j0 d3 D1 C& V e.printStackTrace (System.err);
6 S9 ]: Y7 [! r }0 S1 {/ F: N/ R! [3 R
# x+ f( ~; `! ~* p! f3 u# l" B0 e syncUpdateOrder ();, J: n- r6 h3 c: B& `- Z: t
- K) v1 |" a n
try {7 J' b# @; t# |; u
modelActions.createActionTo$message ' \4 Y9 X, e5 j6 K+ }
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 R3 @9 r* ]7 @. \9 a% b* Z" I } catch (Exception e) {* R# v( T' n L; q- ~ V
System.err.println("Exception updateLattice: " + e.getMessage ());( C0 K! @& x$ u3 h
}
3 q u/ R5 S! V) F$ Y8 e
5 r$ A$ A0 o1 @( |. L // Then we create a schedule that executes the) M" n# p% ^! ?* O4 e* |/ G
// modelActions. modelActions is an ActionGroup, by itself it' L1 v8 U1 T' u. ]
// has no notion of time. In order to have it executed in5 V* M/ D7 b( U' l0 \$ B
// time, we create a Schedule that says to use the* w+ g! d1 i: j3 [. r& q2 A
// modelActions ActionGroup at particular times. This- g5 C& B. [- S3 f2 [: w' t) J
// schedule has a repeat interval of 1, it will loop every5 @ n% a( g: S0 o0 S
// time step. The action is executed at time 0 relative to
% s4 n' s1 s+ D- c2 e' \ // the beginning of the loop.
' W3 |0 ?) S- p- W
+ H: C) }! Z1 G; F // This is a simple schedule, with only one action that is
" X6 x5 j% \8 T3 j6 t" w // just repeated every time. See jmousetrap for more
% I2 O- T7 m G, H+ k% ` h( B3 v // complicated schedules.- a/ F; J3 ~* I: Z2 ]
1 M+ Q; y& U$ |6 [" D1 }* k) O modelSchedule = new ScheduleImpl (getZone (), 1);3 L) l3 z! i$ N+ {5 p
modelSchedule.at$createAction (0, modelActions);% y5 S" @, ^' z W$ h) ^" {
; x. \* H, P7 g2 M1 ] return this;
) l1 G% C) D1 g2 l# b$ a+ H } |