HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ Y$ S; P* s) r' g- F4 a- G
Z. X$ I# A: L% Y% t" R9 f public Object buildActions () {
( T( c. F" w' M8 z5 _% u' X& [ super.buildActions();9 W1 y- E; @7 d1 l
# z E t) s$ a) q6 R \! j; R
// Create the list of simulation actions. We put these in
% n* Z2 T" N5 G // an action group, because we want these actions to be
' L- B- D% g% a, `0 R // executed in a specific order, but these steps should
8 C1 t8 q! v9 { // take no (simulated) time. The M(foo) means "The message
! s& X9 F0 Z+ y4 |6 b // called <foo>". You can send a message To a particular7 w& z$ N+ _; |; _2 [0 z2 H
// object, or ForEach object in a collection.
: b. p0 T! m: t/ P2 @; V+ r/ T- T * R# z% @. u, H
// Note we update the heatspace in two phases: first run. n" t' {( n, A3 G" S+ P, ^" V
// diffusion, then run "updateWorld" to actually enact the, B- ~* y0 r, G3 x& L
// changes the heatbugs have made. The ordering here is
, |0 m5 b4 f/ e$ Z$ ~ // significant!8 k6 X# g' Q: {/ j: i
) _; \4 f+ R2 B' S
// Note also, that with the additional! H" r% B& K! b" z! v- ?0 b! w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' O4 O6 d: b$ s0 I: h, f$ w9 O // randomize the order in which the bugs actually run ]3 E( e# F9 _; P0 X! _% W2 L2 D$ e
// their step rule. This has the effect of removing any
: q4 v$ r9 }# v6 @ // systematic bias in the iteration throught the heatbug' T9 Q; k) @7 B K4 Q. S
// list from timestep to timestep
9 z# j0 r% f! g, Z8 J e% Q ; O& {1 B3 Q4 {- S; {7 u" t9 \' F; y
// By default, all `createActionForEach' modelActions have
3 ^1 }9 `* C B: X7 j) r' \ // a default order of `Sequential', which means that the1 m1 C& l/ ^9 N/ f
// order of iteration through the `heatbugList' will be7 }" H5 {" B. f; u9 g2 d
// identical (assuming the list order is not changed) Q* \8 @8 F' G1 g% V
// indirectly by some other process).
$ f- X2 z+ l; s% }
1 u& s4 E# \. m" r9 e& y modelActions = new ActionGroupImpl (getZone ()); C1 h, h) D( h! P
: ]% \9 I+ Z- N1 f8 p! M, [0 |; D7 | try {
" \; |- R. E$ U1 z9 n modelActions.createActionTo$message+ J9 ]0 B0 t. `; I5 \$ f( g K
(heat, new Selector (heat.getClass (), "stepRule", false));9 j2 R/ h# W6 U
} catch (Exception e) {
3 m1 q; e8 Z6 H/ \; Y) H& d% b System.err.println ("Exception stepRule: " + e.getMessage ());' J* O6 q$ b+ X3 S2 `1 p, T9 {: C7 G
}
" o! T6 y; e3 X6 g' R, ?& H/ r) x1 P/ j
try {
3 r8 y$ L$ T# B* S' z& w Heatbug proto = (Heatbug) heatbugList.get (0);3 F: N1 U- u: e7 O0 c
Selector sel =
. a% m) P# L# e new Selector (proto.getClass (), "heatbugStep", false);
6 a5 j( `- x4 b! N+ T actionForEach =- k; X% m, V9 J6 q6 ]
modelActions.createFActionForEachHomogeneous$call D* U/ F: K/ G
(heatbugList,8 L# R. ~. D, C3 g4 k- M: Z; a$ O
new FCallImpl (this, proto, sel,) _$ W# z. V5 i: Q/ \
new FArgumentsImpl (this, sel)));2 X# S' i( `+ r3 }* i
} catch (Exception e) {8 C. s, F' }6 H8 W* `
e.printStackTrace (System.err);, ^3 H/ M: @' N9 v' M& w
}& K0 E5 |: C3 U3 |# C
K/ g0 @! A* ?2 Q8 M
syncUpdateOrder ();
) \/ f: i) i, m4 F, I6 T6 L; o, \2 g9 _( f9 @1 D
try {
5 W: v4 R- v- @% j6 Y modelActions.createActionTo$message 0 N0 {7 o4 l, n3 ]8 Q9 @- N# J
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ [( }2 l3 ~4 J2 c7 C. q) O2 c } catch (Exception e) {
0 h! o0 ]* D! L" `' N: V& Y. S+ A System.err.println("Exception updateLattice: " + e.getMessage ());
) Z" U! i+ r" D8 B7 K }8 t5 b/ H8 d; V# e1 H1 R
: D& H# G9 Q9 Z( F, ?' G1 ?' N( {+ r8 M // Then we create a schedule that executes the% I$ q$ `$ ^/ K
// modelActions. modelActions is an ActionGroup, by itself it, {' A& N( b( T, O* U
// has no notion of time. In order to have it executed in" W( f3 i; v2 {+ F5 W* ?
// time, we create a Schedule that says to use the; p( k* T' c$ D
// modelActions ActionGroup at particular times. This
5 @' |4 ~6 k- D( } // schedule has a repeat interval of 1, it will loop every: K1 n) o v/ q( f( P, X' \
// time step. The action is executed at time 0 relative to
9 o* t* H8 y* m* G6 @ // the beginning of the loop.
; ]7 I: a! @ U
7 ^/ l$ [' Q( g5 e: x; a# S& E( @ // This is a simple schedule, with only one action that is5 }3 ]+ l2 P6 S: y
// just repeated every time. See jmousetrap for more2 p4 r4 n9 A, M3 t
// complicated schedules.: q% u; h1 `6 T% S' B" q6 N
, Z* o8 o; J0 X3 _& o w6 ` modelSchedule = new ScheduleImpl (getZone (), 1);% G; R8 Z, B1 }& m. |( h
modelSchedule.at$createAction (0, modelActions);
6 J1 R# H' b% P" U& q
6 r2 Q. c" x2 S# P7 {- ^ return this;
4 R# |7 `, k; c } |