HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ J8 [8 ?- N, J4 p# g, e& R+ W D1 Z6 Z" \
public Object buildActions () {
8 i2 I2 o- A7 E- T( p5 c super.buildActions();
- W0 t( w: l( Y1 S ' M+ c$ O4 k X+ g0 M3 s
// Create the list of simulation actions. We put these in1 b8 r7 B+ ?* T6 \- X9 F: A0 g; |
// an action group, because we want these actions to be
) T& P: n+ j$ u% f; `- Z( k // executed in a specific order, but these steps should8 |0 Q$ Y% f5 A
// take no (simulated) time. The M(foo) means "The message. }! D ^& N: l% t; B' A
// called <foo>". You can send a message To a particular1 q- a* z, g! U
// object, or ForEach object in a collection.9 n5 b, Z8 Z/ b. Q" Z
0 U7 Y# ]2 Q/ H3 J$ l- Q
// Note we update the heatspace in two phases: first run- |7 a) M! u7 H- |$ e2 L" X
// diffusion, then run "updateWorld" to actually enact the/ a. ^5 v- L8 Y8 t& f
// changes the heatbugs have made. The ordering here is) ?+ F ?" [6 `8 q. {9 c
// significant!/ R2 G3 _# d% m- D8 ^
& V: j0 q ^; g
// Note also, that with the additional
1 R0 d8 S. Y* L1 Q* S* v // `randomizeHeatbugUpdateOrder' Boolean flag we can$ q2 r* O- s% K( u! `3 G& t
// randomize the order in which the bugs actually run- @0 V& {& Q" a6 v
// their step rule. This has the effect of removing any
. |8 [9 Z& C- P // systematic bias in the iteration throught the heatbug
7 u, |" ^; _% F) O4 V' n& d7 c // list from timestep to timestep+ b2 D4 g1 J5 H! V: k8 q. z6 W
s( e! I( H6 k; W // By default, all `createActionForEach' modelActions have
& G6 C1 ]( [" ]4 C$ T // a default order of `Sequential', which means that the" b- O6 B, Y. j# }, y+ _4 g; i
// order of iteration through the `heatbugList' will be: [* `+ l9 U& Z$ a+ R8 u
// identical (assuming the list order is not changed3 P6 e, e7 w n/ O3 q1 i
// indirectly by some other process).; v2 D( M4 y/ l# T/ l m' N
& f |& m- U% P7 c; i# v% k
modelActions = new ActionGroupImpl (getZone ());4 e: M* r$ H# d; ?7 J0 w7 V
& P2 L5 w+ E' ~ try {
: m5 H1 S, ?% k% i8 |' l modelActions.createActionTo$message% I/ I" w) M7 d) R( ~! z& l
(heat, new Selector (heat.getClass (), "stepRule", false));# V4 Y7 L# F0 o4 R W. n
} catch (Exception e) {2 _, l X# m9 N: L( g3 W! o. [
System.err.println ("Exception stepRule: " + e.getMessage ());
' z, C$ e" K9 J. ? }
4 N% q6 t$ b# Q
' r+ _& X9 Y0 _$ x' J; K2 E. f try {
5 P. z* l5 u, \. D6 F Heatbug proto = (Heatbug) heatbugList.get (0);
& I) x# J- g( K, o9 s7 e8 B. X Selector sel =
, y; x( Y2 T; Z" N q( V# { new Selector (proto.getClass (), "heatbugStep", false);1 c; H7 I: I# s4 b, P
actionForEach =" n3 h/ Q3 r0 f" T
modelActions.createFActionForEachHomogeneous$call
/ Y* ^# A* V4 q0 T/ N/ C# V (heatbugList,
; K1 l2 y7 s4 I' { new FCallImpl (this, proto, sel,
, o9 U7 X2 ]+ Q$ ] new FArgumentsImpl (this, sel)));' Y m) d5 G; @3 S O
} catch (Exception e) { j' t8 e; h* f
e.printStackTrace (System.err);
4 t% T7 R' D' s1 w }
' }" d( M6 b2 [ : e! a- X. I" ^: j& ^
syncUpdateOrder ();; C, E8 W6 [& C7 a
- j, }. M( O; D/ Z/ `6 ] try {0 N" c2 K; n/ w0 T2 L1 ?' Q
modelActions.createActionTo$message
& K9 b/ I% u% E (heat, new Selector (heat.getClass (), "updateLattice", false));
2 e2 M" D; I8 Q } catch (Exception e) {
) o/ j8 X. j5 }( U3 t System.err.println("Exception updateLattice: " + e.getMessage ());
/ ?0 W. B; T5 }2 Q. w$ W }& C6 |2 {3 A" q! e
: U( s/ o- y* H9 \: m // Then we create a schedule that executes the
& M, i8 I/ b0 R8 S% y' ` // modelActions. modelActions is an ActionGroup, by itself it
7 S, M7 \3 J# v5 x" }4 J // has no notion of time. In order to have it executed in% j9 ^% ?" _; V9 Q; X- \
// time, we create a Schedule that says to use the
7 u Y! U, W# E% Y% J' D // modelActions ActionGroup at particular times. This
S3 O0 G! W( {- M0 q- F // schedule has a repeat interval of 1, it will loop every. u8 x; r& H4 r6 E5 I; S! {+ a
// time step. The action is executed at time 0 relative to b5 c2 f3 @: m, k* y! \! _, t1 W7 D
// the beginning of the loop.
+ }* V I, e, Y/ r; Y P2 @4 ~) u3 Z' ` ^% d
// This is a simple schedule, with only one action that is
1 F9 `* O4 J* _0 ?$ O // just repeated every time. See jmousetrap for more" e; k3 n. Q) h2 N5 x$ @0 i: H) T8 L
// complicated schedules., D5 [; s0 a- i9 v* a
0 \% X: u V% b
modelSchedule = new ScheduleImpl (getZone (), 1);
& Y3 ?. W- x5 F$ k modelSchedule.at$createAction (0, modelActions);
7 A* S" r+ b9 J 2 M4 X) ~- J# U3 f- P9 d0 [# _& W
return this;
3 i; R5 e/ C I } |