HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. X; a6 l& q9 w/ b, Z: d& k: X9 d" D3 r3 _
public Object buildActions () {9 r7 R5 g+ r3 O% Q# d, W4 Z( g( L+ w" T
super.buildActions();
* w1 n0 J F' B; M. f 4 r( T5 h- R" b6 R
// Create the list of simulation actions. We put these in
1 g. v7 E% R" E1 o# j, U4 ^; [ // an action group, because we want these actions to be* V6 X5 t/ n6 n! B6 p4 Y: a
// executed in a specific order, but these steps should D' P% t9 z; d' V# F5 [8 b" j6 G* `
// take no (simulated) time. The M(foo) means "The message
; L8 i- Z F& J1 y2 p // called <foo>". You can send a message To a particular* {) E0 L( `2 s6 r
// object, or ForEach object in a collection.
) {$ o/ J- w$ u& A f9 b! e& K
- J2 Q9 s: J1 u& \! x* c; a // Note we update the heatspace in two phases: first run
0 F' a9 r" ^7 F) } // diffusion, then run "updateWorld" to actually enact the z5 l' n( Y, d9 w X/ ]
// changes the heatbugs have made. The ordering here is3 a& L. b1 h+ W' O
// significant!
- Q- B) E7 H7 W7 | % K/ T7 D1 B* U$ b/ _, _
// Note also, that with the additional
3 V' C* d* J+ o // `randomizeHeatbugUpdateOrder' Boolean flag we can- I+ W! }, T7 n: m% H
// randomize the order in which the bugs actually run: k) ~' k1 ^$ W2 t4 X+ ]
// their step rule. This has the effect of removing any
0 b `5 g" f, ~8 Y: O. z/ { // systematic bias in the iteration throught the heatbug
8 q" f( \" n. C. D+ q k // list from timestep to timestep! r: I/ k: v: f T
2 G A! J8 d. u6 n$ f
// By default, all `createActionForEach' modelActions have
( \7 r- _9 x% L1 T // a default order of `Sequential', which means that the$ U' N6 G$ E) b
// order of iteration through the `heatbugList' will be
' j. y! F, w& t: H; s4 L. r. [7 S/ C // identical (assuming the list order is not changed
. S) _+ h0 p( {; b! N5 z // indirectly by some other process).' `2 H* `. a. n* F# |9 V
. l) E2 a, }! r3 L T+ B modelActions = new ActionGroupImpl (getZone ());
8 v. U! O8 G; P
3 T+ N2 n [ d; q/ ^8 W( o0 Q try {6 [( {$ N* [ m2 p3 h7 s8 ?: s
modelActions.createActionTo$message1 x' X! R7 ?! L( Z) H) q; x
(heat, new Selector (heat.getClass (), "stepRule", false));
7 y# f; o- B) h1 X" |' z } catch (Exception e) {* p, v9 j# S0 f$ [
System.err.println ("Exception stepRule: " + e.getMessage ());
& A% G/ @+ r0 i, U" U' ?; D( d+ O }5 R2 ]1 P, ?! I0 a' t$ g
. h! ]" b- k+ L1 I5 | try {- Z5 F6 C1 V: n/ N3 ~' i
Heatbug proto = (Heatbug) heatbugList.get (0);: I0 d7 b. |# q: K) k& c
Selector sel =
4 N5 o% v5 Q/ k9 E new Selector (proto.getClass (), "heatbugStep", false);# w# {% R6 y4 ^. \+ k
actionForEach =, m) J$ v) R* W1 @: y# f8 X4 J% p
modelActions.createFActionForEachHomogeneous$call/ P" Z" o3 R) {' @$ v
(heatbugList,7 \( T+ B2 O7 `% p& S
new FCallImpl (this, proto, sel,
# ~0 H6 A+ Z4 M new FArgumentsImpl (this, sel)));
. ^4 q6 h) h' E4 S( e } catch (Exception e) {0 Z1 z$ O* n) O9 ~- T' d4 o7 m
e.printStackTrace (System.err);
; o3 z% L7 J/ n0 x8 Y8 x }
5 i. M1 v# {1 a* A \' s7 D& Z) ?4 h+ s" G! `8 ?
syncUpdateOrder (); }4 R& X; k4 v; o/ J* Q
" f. \0 X" }" q# C: B try {
0 I* s3 [6 {: C* Z/ x' ^' H modelActions.createActionTo$message
# i$ ?7 J$ E2 L; A; R+ b& w (heat, new Selector (heat.getClass (), "updateLattice", false));8 D" o4 P8 R W5 R# c1 x4 A# a6 U3 s ^
} catch (Exception e) {
" R# @; N9 ?! [; `% p9 K System.err.println("Exception updateLattice: " + e.getMessage ());- n; `( O5 s8 z4 c
}
8 V( G$ N0 ~2 [& w+ ^# I ! `, j/ S K5 m' m9 X4 q
// Then we create a schedule that executes the( x) `/ |) e& u
// modelActions. modelActions is an ActionGroup, by itself it Z( U9 C+ q; }9 |& c
// has no notion of time. In order to have it executed in
8 g R3 h# ?! u) E" Y // time, we create a Schedule that says to use the
& w/ f. r6 ~0 B0 @0 |" d // modelActions ActionGroup at particular times. This+ [4 b. q9 q8 O- b
// schedule has a repeat interval of 1, it will loop every; F( T$ _" N) Q; O. C. N
// time step. The action is executed at time 0 relative to) ?9 z( C2 t; U6 R) K
// the beginning of the loop.# F' h; R8 ^! m: _+ r0 ~5 t
9 K4 @( E+ P+ l# S
// This is a simple schedule, with only one action that is
' f: ^( H6 G0 h. A) p+ k+ M // just repeated every time. See jmousetrap for more5 s; G7 L- n0 g, _2 X+ Y
// complicated schedules.
. L4 E6 K; _4 F6 d1 p* Z : Q& T# F3 F3 s6 V. {- w2 b
modelSchedule = new ScheduleImpl (getZone (), 1);
' W8 f% Q- u' a9 I$ c0 y3 [! J modelSchedule.at$createAction (0, modelActions);
5 V9 C4 p- J. ]8 k K7 @+ `, l1 g
return this;* `( d; S4 s% k( p2 H j7 i
} |