HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) @; o' ?0 X: f! [7 v
/ \( r+ C Q6 ]' H h; c$ _, h public Object buildActions () {6 f: R1 v8 \- D# o2 O `, q# L
super.buildActions();
+ H7 M, r4 k( W: t
6 o$ R0 O3 p; C' u // Create the list of simulation actions. We put these in4 c7 |, ]& F8 @3 A0 N
// an action group, because we want these actions to be
) q+ Z- o3 `$ ^ // executed in a specific order, but these steps should
" S/ L6 _* o& M // take no (simulated) time. The M(foo) means "The message
+ R) L& b6 g8 g0 A* }7 x // called <foo>". You can send a message To a particular; f8 @( v( F4 Y8 z0 y- o- Q* X2 @$ A
// object, or ForEach object in a collection.+ T5 q2 w( e, u
3 x' k( n" }6 V // Note we update the heatspace in two phases: first run
0 E. P7 L! K% e" D; ]5 h // diffusion, then run "updateWorld" to actually enact the
4 O1 t/ Q; G& @2 } // changes the heatbugs have made. The ordering here is
0 _7 b( f6 A2 V" k // significant!# P7 n0 W4 q( J: c+ H( J5 t/ E' `) x; W
: f6 i( m( t; d. o( C
// Note also, that with the additional
* P- F( C/ P- x5 f" x9 L // `randomizeHeatbugUpdateOrder' Boolean flag we can; v# {% V1 R5 u f& R
// randomize the order in which the bugs actually run
Z. e8 k7 f7 D% |& ]3 A) r // their step rule. This has the effect of removing any
5 o$ W. P! X7 j8 b" `9 s // systematic bias in the iteration throught the heatbug# w3 q4 R" @- x5 T3 l. [
// list from timestep to timestep
; U5 |* M, v0 f
8 _$ k4 k! R; F5 ?1 N1 k) m // By default, all `createActionForEach' modelActions have
( E( M) t7 }& K7 O // a default order of `Sequential', which means that the
2 }0 A" b1 a W0 r' E0 [0 l // order of iteration through the `heatbugList' will be4 ?! ~, A6 X9 ~" _$ S
// identical (assuming the list order is not changed, ^! X2 K& W" G
// indirectly by some other process).- Z! x- X- G* ~2 f( T; G, f" e
0 Y* }& B! j" V, S3 I
modelActions = new ActionGroupImpl (getZone ());
' h% ^- B2 C! h+ w" O' e7 L" Q; U! V/ F! F4 j
try {
8 h8 y# n( Q* T Y modelActions.createActionTo$message
9 M% a; D/ c* H( w4 W (heat, new Selector (heat.getClass (), "stepRule", false));
. A( [! \# W( d } catch (Exception e) {0 k( b, R" M' u4 A7 E7 k
System.err.println ("Exception stepRule: " + e.getMessage ());& G% J6 ?! z8 W& F$ l( d, H8 a N
}
) I9 i8 _7 @& W R
0 W: E |7 ~. r' ?5 f try {% b1 n; ^$ F0 i \' l0 G
Heatbug proto = (Heatbug) heatbugList.get (0);; O5 }& M5 k" q, a N6 ]" C \1 }2 v
Selector sel = 7 P( Z* Y' U' ?0 X: H
new Selector (proto.getClass (), "heatbugStep", false);
% J: S, u6 `, G% g9 x0 k$ v# e actionForEach =
% J1 |1 J. T" _+ ]+ K; ? modelActions.createFActionForEachHomogeneous$call
/ r5 F1 \2 D! T2 ?6 n- N; T; R (heatbugList,9 @$ H" d- B7 B# @- b1 {. n3 q
new FCallImpl (this, proto, sel,
& s3 ~; _' [3 }& f new FArgumentsImpl (this, sel)));4 g$ c9 G' n* v9 f( o% \
} catch (Exception e) {7 \' f/ _5 h; Z# v. d+ T, X* g
e.printStackTrace (System.err);* p/ o+ N6 K7 u5 x0 N+ I
}
$ u" I/ a# G! Y( o6 J" K
; L% z% E# C/ g2 ^0 M5 ?* j) p syncUpdateOrder ();$ T3 Y8 v6 o% |% s: l$ L8 w7 u
# e& n8 ~. x V0 ^" l( C- P+ @! J) \6 O try {. |7 b0 Q9 C* T9 m5 S6 r: Z
modelActions.createActionTo$message / a- G2 f- E1 l) c
(heat, new Selector (heat.getClass (), "updateLattice", false));7 r/ p0 v% V9 ?1 p8 q
} catch (Exception e) {
* q( y6 U( O1 t2 A$ N2 w System.err.println("Exception updateLattice: " + e.getMessage ());
5 |9 P4 ?! x5 {0 } b$ ?. k* n }* K# _" l+ } o. a8 G3 P5 c
9 E, x9 q; K) L6 |. V
// Then we create a schedule that executes the0 f; U/ s5 y+ W
// modelActions. modelActions is an ActionGroup, by itself it
' F& l- {# c4 K9 O4 r1 R0 H // has no notion of time. In order to have it executed in
) m5 B/ G6 B* ` o // time, we create a Schedule that says to use the% F' ~2 N4 A; c! x7 `) X* T( j
// modelActions ActionGroup at particular times. This
6 T4 v0 {' M4 K( g# o2 T( D // schedule has a repeat interval of 1, it will loop every' W% N+ n$ A: p
// time step. The action is executed at time 0 relative to
}: j( q% ?7 H- }$ C# | // the beginning of the loop.
& x4 g; r5 |6 a. Q0 ?( _* F% J$ M% q, Z6 x% g$ n
// This is a simple schedule, with only one action that is
3 c6 M# Y+ ?, M( @ // just repeated every time. See jmousetrap for more
% u5 l3 V, c; P3 G% Y4 Z" ~ // complicated schedules.6 K5 \# o$ v3 m. }8 Q) T
# t+ a3 ]! A- ]" C: d modelSchedule = new ScheduleImpl (getZone (), 1);
2 n. b! V4 ]! {$ M+ |( u% M modelSchedule.at$createAction (0, modelActions);4 N" I3 D' `0 g- t. D- W
$ s; g, O0 D, M9 c7 t( s& a" ~ return this;2 T$ J0 j' m+ ~3 h5 K7 i% m' f$ [" A
} |