HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. J( U* v' e+ X' y! k& D
1 {$ j0 S9 Z2 x+ j public Object buildActions () {
- C; J) T0 z3 P$ q super.buildActions();) r9 h) e1 o. j' k
8 q) \- U, R. \! x# W // Create the list of simulation actions. We put these in
$ H% H: c, u4 O9 @0 D2 X2 m // an action group, because we want these actions to be
8 e: v' [: w. Z // executed in a specific order, but these steps should
) K. }1 H t- K9 j! j5 N // take no (simulated) time. The M(foo) means "The message: j6 o; ^: y0 {
// called <foo>". You can send a message To a particular
* z0 ~2 ^6 g5 T, A1 n2 h // object, or ForEach object in a collection.
7 r& c/ Z H# W% s3 j( L, w9 }( \6 Y L6 M+ Q- p. y' c8 f/ y3 o" ?2 a0 O
// Note we update the heatspace in two phases: first run8 B1 T3 D0 c" i8 z
// diffusion, then run "updateWorld" to actually enact the3 p1 |" R- A7 P4 U9 A. }- @
// changes the heatbugs have made. The ordering here is
4 W" P* L4 h' l // significant!' q; \+ [/ A* I) O0 A$ @
( N& u5 A6 J; Z2 p' _) J
// Note also, that with the additional
3 W0 G8 F9 D$ _* |. W2 I; B // `randomizeHeatbugUpdateOrder' Boolean flag we can
. p) g! n# ^& V/ O9 U5 g7 f0 K // randomize the order in which the bugs actually run8 h5 A* o& x+ \# V4 O e" [: F
// their step rule. This has the effect of removing any6 t" M6 h5 @' F, U1 \7 v
// systematic bias in the iteration throught the heatbug' E* D6 G6 {( m+ H* ?( h
// list from timestep to timestep
9 s3 i2 ?! N* F+ M D1 G
# L9 J! Z# H' ^3 q# z3 W // By default, all `createActionForEach' modelActions have. j2 d5 ]3 S c, b3 N" R7 {' X5 v( c# A
// a default order of `Sequential', which means that the# N+ [. ?% u) I/ p
// order of iteration through the `heatbugList' will be* H0 d$ I% X X0 A4 F
// identical (assuming the list order is not changed
, I: {+ E- X: g' b5 l [ // indirectly by some other process).
. n2 P/ D! i/ n, x ' P+ y& f$ G' x
modelActions = new ActionGroupImpl (getZone ());
' s/ O$ o5 }$ `$ G7 ]$ d$ d; D$ [
try {
' w4 ?0 o7 C: w0 N/ g5 z modelActions.createActionTo$message
3 N0 [/ \) Q4 n7 h3 F/ n) j (heat, new Selector (heat.getClass (), "stepRule", false));
' W: U, W8 |4 l8 E5 [ } catch (Exception e) {
& R. i4 y# C4 U( B3 y0 ~ System.err.println ("Exception stepRule: " + e.getMessage ());
' |' F$ m. q2 s5 V1 L" Q S }
$ u x3 X8 s: Y/ v" u* c1 z5 @& j' Z% U" c
try {. ^" U" `2 n% k
Heatbug proto = (Heatbug) heatbugList.get (0);. C5 Z8 S9 k* J5 `& ]; T
Selector sel = . w B4 b4 m5 S, C4 l
new Selector (proto.getClass (), "heatbugStep", false);
& }# S8 C$ N& q- V5 h% X actionForEach =8 H7 N4 ]& c" X( r% h& S+ a
modelActions.createFActionForEachHomogeneous$call
7 ^( Y' N; D" y6 R (heatbugList,
6 Y6 X/ e( ^5 k) r; w& |9 {' v3 y new FCallImpl (this, proto, sel,7 @( `1 C3 F$ |$ t
new FArgumentsImpl (this, sel)));
O6 o2 u) K7 D( c* Y* p- m: T } catch (Exception e) {5 p5 o# s$ ~, u+ c% a; u! ~6 ]+ G
e.printStackTrace (System.err);6 z4 q& S7 |, f- @
}
) l! Z2 N5 L5 e& m" ~2 D6 c
8 C5 j, o6 c" P M2 H' r6 B: K syncUpdateOrder ();
6 g2 U9 a6 N( K Z. g6 C* M
& t8 _% P( W8 K+ _/ p+ R try {
5 k; d2 @8 X$ s0 r modelActions.createActionTo$message
3 r3 g$ v( X- ` @6 J$ p (heat, new Selector (heat.getClass (), "updateLattice", false));
* k; ~+ Z/ B* f9 H } catch (Exception e) {
) n2 ]2 X4 ^' ^. f' u$ z7 j System.err.println("Exception updateLattice: " + e.getMessage ());( m& @! e5 s: W( D+ G) @+ u
}
& h. J" y: ~4 U/ ? ' x- }3 D; p4 Z7 D
// Then we create a schedule that executes the" g; s5 C6 [ E$ W& J3 z4 N) }
// modelActions. modelActions is an ActionGroup, by itself it/ {; S9 Q+ K4 N* j* L! E& ~6 D
// has no notion of time. In order to have it executed in
+ Y3 B% E. B4 m, n/ _) E) B // time, we create a Schedule that says to use the
! [4 `. w Q( l$ V# b9 b; ?4 @ // modelActions ActionGroup at particular times. This$ Q- W- O* P6 b' o
// schedule has a repeat interval of 1, it will loop every
N7 q3 _7 h/ f. n. q // time step. The action is executed at time 0 relative to
2 u' t: @1 w d; [* l // the beginning of the loop.
) V! a( p9 U& r: M2 j, m# ]) O# e0 J
// This is a simple schedule, with only one action that is" f6 P0 `2 H) P' q
// just repeated every time. See jmousetrap for more
: v' }* R9 R+ P% ~ // complicated schedules.# J# y9 }0 z# R# s& ^
e) g) ?$ P- r/ d modelSchedule = new ScheduleImpl (getZone (), 1);
& [, n/ h6 r9 q+ Y modelSchedule.at$createAction (0, modelActions);9 o3 b5 d* R. t! i: A
! J) @7 }: J" i+ ^ return this;2 y- u% ^; X# q3 T1 G% V- Z
} |