HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; R$ B0 X% B0 I! l
. X9 L" r& |2 d* D: z' n4 p8 I public Object buildActions () {
6 E0 `" ]( K: D( T8 S0 z super.buildActions();1 [8 v/ Y9 R: U, D: {# M
, j' Q! T- o% R& s
// Create the list of simulation actions. We put these in) s: ~* b9 \! A) C" T
// an action group, because we want these actions to be( ]& h" g& S5 n) q) |( a! T
// executed in a specific order, but these steps should+ Z. {' V; O. w' {* U( F
// take no (simulated) time. The M(foo) means "The message
0 ~4 G& t# \0 P, G. z // called <foo>". You can send a message To a particular& p' y. S) d7 j9 }7 g
// object, or ForEach object in a collection.
# V4 D5 g, F% o% y
1 Q+ b& p# J- `+ Z( v7 b // Note we update the heatspace in two phases: first run
* V8 \: T& x4 A1 X // diffusion, then run "updateWorld" to actually enact the
+ z% _, X1 E( t4 Z // changes the heatbugs have made. The ordering here is; K7 ?( [; c$ a* t. P/ s
// significant!
# O1 C! ?% _7 l0 h4 {( M0 y: E
" ?$ [$ U" _* W' h // Note also, that with the additional3 Q9 b { Z4 j# R% m( W$ a
// `randomizeHeatbugUpdateOrder' Boolean flag we can* o& V! P( O$ M
// randomize the order in which the bugs actually run1 V, q/ G% `) O @& ~: \
// their step rule. This has the effect of removing any
3 R% K2 ]) I$ B1 r // systematic bias in the iteration throught the heatbug
% C+ P+ b+ }+ z% \& t* d // list from timestep to timestep
5 L/ {# s- K1 ?8 @% Z& X4 s$ x. G
4 N- j( X/ s G( F& L9 f // By default, all `createActionForEach' modelActions have2 p! G5 [4 |' o- K7 `) v3 a0 r
// a default order of `Sequential', which means that the
7 G7 }' f$ R/ W# ?1 m. V' q! J // order of iteration through the `heatbugList' will be |( \" l$ W# a2 l5 ], {* J
// identical (assuming the list order is not changed& q1 u$ D6 E+ m
// indirectly by some other process).! C5 q" k7 j) }' n2 q" L
) M: }! A X& h6 N+ P modelActions = new ActionGroupImpl (getZone ());3 h# R& K- n0 W9 ?5 V( `
# j1 T/ r3 k) w try {" h! U: Q# s8 `9 A$ f3 z" o
modelActions.createActionTo$message3 H1 J7 J5 f5 a. I
(heat, new Selector (heat.getClass (), "stepRule", false));
* [ [' c" R0 C8 V } catch (Exception e) {
a0 i( L) _% n( u System.err.println ("Exception stepRule: " + e.getMessage ());
- _6 q" y5 a2 Q+ d3 d _ }$ U8 [6 f# l2 M; w0 M
0 V. p. b# `$ a try {
. G# \ x5 X: Y x2 _( O: V+ f6 B Heatbug proto = (Heatbug) heatbugList.get (0);
# e0 B$ c' C5 G% o# m Selector sel =
; j, ~# R* l M& Z- i/ s% G+ l! g new Selector (proto.getClass (), "heatbugStep", false);4 q! _0 @% J* _6 T4 `
actionForEach =
! O+ b4 h) E+ j6 ]0 B4 u | modelActions.createFActionForEachHomogeneous$call
/ v7 M4 M" G! Y: V1 [8 j2 L8 T (heatbugList,
1 G0 P# G3 g9 j9 }6 O+ h new FCallImpl (this, proto, sel,
7 m0 Y; e) C4 A9 H( G0 y) L- M new FArgumentsImpl (this, sel)));+ Z( b. R$ X* L$ M
} catch (Exception e) {3 B, C# n/ h& Q: _, j5 N( q" ^
e.printStackTrace (System.err);' l# u. H, f7 i
}$ {, h' b+ q6 q0 o
/ ^1 C$ S! W) S7 \3 O; U9 U# `
syncUpdateOrder ();+ K" f5 J0 u: M: v, d& W5 o# X6 ?
; I& |. L7 i9 o, B( i$ t4 Y. L* S
try {
, w, B; }# c% T; n' i modelActions.createActionTo$message
$ J5 K. E7 y; |/ g (heat, new Selector (heat.getClass (), "updateLattice", false));
- V+ s3 J, K8 B: L } catch (Exception e) {
3 u" R6 j; M- o# h6 F9 J" S0 W2 g System.err.println("Exception updateLattice: " + e.getMessage ());
3 _6 K3 H; m4 n6 a5 X6 d% H }
. h0 ^4 |& s$ w* C* {. q/ Q
% W) Q- o5 m, q // Then we create a schedule that executes the
" q' g! H" G0 L: Z% e* ^. e // modelActions. modelActions is an ActionGroup, by itself it
1 v: ~6 ^& E" T5 M1 N6 T0 Y6 ^ // has no notion of time. In order to have it executed in
Y/ k3 r( ]* i( U5 T7 e. S+ w // time, we create a Schedule that says to use the5 R. Z. s) i3 k/ h- L' G& i! Z3 M
// modelActions ActionGroup at particular times. This3 v% R1 e. u6 M# Y# v' V6 I
// schedule has a repeat interval of 1, it will loop every
. f# a/ ~1 f, |# V6 [ // time step. The action is executed at time 0 relative to
5 H! t- j6 Q: {& b // the beginning of the loop.
, j( c* o' e9 q: D4 d5 j/ h$ j% A, {! I, y8 J0 K
// This is a simple schedule, with only one action that is8 V- l$ H5 x$ E5 ]. M6 c, s
// just repeated every time. See jmousetrap for more
9 n$ X1 R0 G d // complicated schedules.
. ?0 D! |6 {0 [7 L
2 R# Y+ {$ F1 \ modelSchedule = new ScheduleImpl (getZone (), 1);0 [- S- z |( X; _6 R
modelSchedule.at$createAction (0, modelActions);
) d# s; d9 Z8 g0 B8 z7 m
' Z- d6 G9 [& @8 ?& h" h, J& M5 j return this;
: P/ c' k2 y5 F% f } |