HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 y; }* ^+ A5 j2 D6 p; `& z
$ [& Z* V6 m6 y. ? public Object buildActions () {& q& P% {9 ~! X8 T1 _1 c
super.buildActions();+ C; W' U3 G" E9 _
. N% A7 {8 v% N& _% c
// Create the list of simulation actions. We put these in, X0 D8 A+ @% {6 }% t7 m
// an action group, because we want these actions to be
9 C7 o( ?* j |0 }0 E: x // executed in a specific order, but these steps should
% F4 E1 O1 ]2 O5 L$ [ // take no (simulated) time. The M(foo) means "The message
5 B' a+ t* N$ `; j, ^' x1 E- W // called <foo>". You can send a message To a particular
8 K9 b; Q, W1 ]+ x g" Q, _5 o/ m // object, or ForEach object in a collection.
: m& z6 `, y7 X4 L# r9 p) \
9 I6 j( j% W. p // Note we update the heatspace in two phases: first run' t" }3 S: N. t/ H- K
// diffusion, then run "updateWorld" to actually enact the
6 W! a: w/ U; b; A8 K- n // changes the heatbugs have made. The ordering here is* _/ [* y# e5 ^8 G
// significant!
5 a+ }& C+ P' ~+ S) M; r* N0 [
( t# o, V, C& o2 T // Note also, that with the additional/ ^7 K8 I3 y7 H/ `( b- l0 [4 E4 P
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 [8 N7 P5 X7 ]4 n0 F% A+ u4 j
// randomize the order in which the bugs actually run
7 F' e5 u4 l; _, a" T( Z* j( i // their step rule. This has the effect of removing any
+ B( U+ B& @( X9 \2 v // systematic bias in the iteration throught the heatbug
* R- _) Z) {! K // list from timestep to timestep3 a; T. N9 h6 `# W9 w) ]9 U
) |9 z2 ]; M9 C; ]! c2 H) X9 | ] // By default, all `createActionForEach' modelActions have0 Z8 s) q" @1 d7 o. v3 W9 A9 w
// a default order of `Sequential', which means that the
, X, U7 H2 J8 o% M2 u# c/ c) h // order of iteration through the `heatbugList' will be ^; U) n6 z2 g" r
// identical (assuming the list order is not changed+ U9 r/ y# v" s$ _# J8 r
// indirectly by some other process).( S+ c0 Q! D, f2 z/ p+ K8 w
4 B7 h( G) ?4 Y- o! _ modelActions = new ActionGroupImpl (getZone ()); W& t T7 e: F9 p: r5 }1 @
' c7 e# B; h$ t) m0 M
try {
e+ X7 {! @2 n5 B3 b0 c modelActions.createActionTo$message
5 [5 O1 Y8 M0 h3 \# I1 T c" Y (heat, new Selector (heat.getClass (), "stepRule", false));' c9 R- h; {. ]4 I( B- R( ]
} catch (Exception e) {
8 {+ x; k) |( ^ System.err.println ("Exception stepRule: " + e.getMessage ());1 {3 ]3 N; u& U ~4 F
}
6 \5 ?. w% t6 N
4 K7 P! `1 \: _; @+ N try {
5 `0 T. V+ u; K( ]; i Heatbug proto = (Heatbug) heatbugList.get (0);
0 K1 ]: X7 K$ b0 O- y8 @' o7 j Selector sel =
3 q$ f# K7 J! e0 k& I new Selector (proto.getClass (), "heatbugStep", false);
9 s( o9 |2 H% p+ F* F. I actionForEach =' [$ x3 ` O( |7 G9 k6 R! z) c3 N
modelActions.createFActionForEachHomogeneous$call
% `0 g% d. [. E I9 k" A (heatbugList,/ ~; X) N G+ v3 W# o
new FCallImpl (this, proto, sel,7 Q* ~7 e9 q" T! r
new FArgumentsImpl (this, sel)));. r: b( D) e, V- M- o: L
} catch (Exception e) {
/ h5 n1 ^( k* d$ z7 o' Y- t% M e.printStackTrace (System.err);
$ U0 \3 y d Q2 c2 [ }
" W" t- ~. }" @% F . X1 w: w! B; e3 w$ T
syncUpdateOrder ();
8 U8 Q4 _4 s# q$ P' E& I
; o6 _* g8 ^) y& j try {$ p1 ?" y0 G, F
modelActions.createActionTo$message
' b% p5 i" y( j { (heat, new Selector (heat.getClass (), "updateLattice", false));3 w9 ]& t$ e7 m
} catch (Exception e) {* Q1 `. j& \: }" O- G
System.err.println("Exception updateLattice: " + e.getMessage ());
) Z) \' N( c; }' E9 g }
9 j; t+ y1 D! G" Y) ^& S8 v- b
. Q% u& n; Z, O2 X/ y // Then we create a schedule that executes the; s+ q! y4 k7 W: |+ p# @6 X2 j6 T
// modelActions. modelActions is an ActionGroup, by itself it0 w/ f/ t: Y7 ~
// has no notion of time. In order to have it executed in0 _& U+ J+ y' j2 K4 H( D
// time, we create a Schedule that says to use the
& |$ ?$ T8 x3 o; @9 Y5 }+ l // modelActions ActionGroup at particular times. This- O5 U! [- q; ~+ {; u: L
// schedule has a repeat interval of 1, it will loop every
" f" J+ u; Z) T5 [! P // time step. The action is executed at time 0 relative to
! m! ^1 T; T. S% D* e // the beginning of the loop.1 E, `) {( S* s/ z) R- _5 [# n6 o
* @# H a1 Q- T; Q3 s V# W
// This is a simple schedule, with only one action that is" t t/ Y( X( h' L% K
// just repeated every time. See jmousetrap for more
" b! z5 t7 D3 ` w0 ?4 |! N // complicated schedules.. ?. y: F( b* U) W# d% i j! I
4 G& F) A* C+ B( ~$ N) Z$ g+ |1 f
modelSchedule = new ScheduleImpl (getZone (), 1);
' z- k9 A% d9 h: j; S7 j modelSchedule.at$createAction (0, modelActions);
2 W% U3 c% b0 ], d- m: j
7 K& h" [4 _3 a return this;
' e7 m( ~9 P6 p7 h0 T0 ~; h2 S% d } |