HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- ^) v$ b; O0 S, r5 w# ]# q
5 C( [% s8 z# J4 o( w public Object buildActions () {& V7 y+ I$ ?* P5 n" D
super.buildActions();
3 ~+ u- X5 Y1 `6 F# j
3 i! t% W8 ~ j0 Q- X // Create the list of simulation actions. We put these in
h& a+ R7 u' \% i* ? o // an action group, because we want these actions to be8 k+ j' a' F! P5 @
// executed in a specific order, but these steps should
# N4 x/ {3 M* v( _8 t // take no (simulated) time. The M(foo) means "The message
, b% a r, _* a& y! b* ?7 m/ d. L // called <foo>". You can send a message To a particular
7 b* m8 q6 d. {" L$ S$ t // object, or ForEach object in a collection.4 n0 G/ k$ v: q+ x
% {% h% h6 T7 r- X2 ] // Note we update the heatspace in two phases: first run
8 t+ O1 p) S, j6 l- Q // diffusion, then run "updateWorld" to actually enact the# |8 R/ I- K; X' R
// changes the heatbugs have made. The ordering here is
/ g$ \) J3 b7 e1 q/ q // significant!5 [; {- J4 J4 r' w0 p4 {6 _
+ p8 O7 D7 `$ V* u( v // Note also, that with the additional
: s7 v5 ?9 H/ L X; n- L, O // `randomizeHeatbugUpdateOrder' Boolean flag we can
: L0 d' m$ u: q // randomize the order in which the bugs actually run" ]/ H+ L' q# S4 x
// their step rule. This has the effect of removing any
. \; T% m3 x9 ~! I // systematic bias in the iteration throught the heatbug
+ @1 x( o" `7 t) O+ K. I$ v // list from timestep to timestep
5 v, @" P/ A# O9 i$ x0 \1 k+ d 9 H! |, p: I6 Y9 g& a. P/ E' ^
// By default, all `createActionForEach' modelActions have
1 ~+ e$ f e# `* N9 M9 w; J // a default order of `Sequential', which means that the. H: M& x# s' D5 e! B* b
// order of iteration through the `heatbugList' will be; t! O9 f" X4 g* X, ?" K
// identical (assuming the list order is not changed
4 D- G0 u0 r R3 a$ s/ \* y // indirectly by some other process).. K1 b! j7 J4 @; C# S# `
9 g+ v4 s0 S `0 D. Z
modelActions = new ActionGroupImpl (getZone ());- g8 X. |. m' Z T
1 Y: I0 N, D; B4 ~( ?5 z& Y
try {
0 x9 c) i& I: m% Z" M/ Y3 S8 u modelActions.createActionTo$message
, i! F5 {7 \# a8 I$ `" x% s L (heat, new Selector (heat.getClass (), "stepRule", false));8 g7 W3 l- P6 J2 \ T; `5 h; K
} catch (Exception e) {
* W7 Q9 e# u0 P: j" A System.err.println ("Exception stepRule: " + e.getMessage ());9 @. N5 g# `6 c6 r( V5 r5 u8 W& q, R8 W
}7 s# t' N- F! a( D
T; q% F: s; N
try {$ z! p. ~8 [4 T e% y
Heatbug proto = (Heatbug) heatbugList.get (0);
2 }. `& r4 i- i; w& L. t Selector sel = * |0 B; `' p8 Y
new Selector (proto.getClass (), "heatbugStep", false);
$ `4 x! `# `" o* a! e/ t, N# f. P7 ~ actionForEach =
0 c4 {5 x, A; n3 K7 I- ^( w3 j modelActions.createFActionForEachHomogeneous$call% y) q, F) B. ]) a8 L c: r9 s- X
(heatbugList,
2 _1 x% H7 Y& K, E( c new FCallImpl (this, proto, sel,$ w3 y9 D( A, N1 K$ N; T1 i
new FArgumentsImpl (this, sel)));/ ~" E: N) E( H7 ?# {' v
} catch (Exception e) {
0 \1 ^7 y. B9 `/ P* n e.printStackTrace (System.err);
& X( Y" n) v4 T5 L# U! } }
# `: P0 A. p: o0 z/ C) p2 [ 4 E# d8 c' w7 C1 c; {
syncUpdateOrder ();# k; M/ d B' ]2 }( Q9 h0 G
|: a1 z" K2 t8 o
try {
' M# K9 v' [$ @9 B( ?' o9 C# i modelActions.createActionTo$message
. W4 y( U# c2 J9 J( k l W6 q$ h (heat, new Selector (heat.getClass (), "updateLattice", false));
) v$ N0 \2 n* P' v1 c6 J2 ?% } } catch (Exception e) {9 `9 ?( ?2 b; S; ^' {/ C8 i/ o
System.err.println("Exception updateLattice: " + e.getMessage ());- \) b" j" |- k* a( u0 q
}
* c, L9 R& P5 I- {( b
4 I+ }# E; O1 o4 K" {0 E$ k" S // Then we create a schedule that executes the. m, {' X+ p$ h6 v" C
// modelActions. modelActions is an ActionGroup, by itself it' K F& v' x, m/ q4 R
// has no notion of time. In order to have it executed in
: U/ w; m. t2 V0 {" }' m0 Q! f // time, we create a Schedule that says to use the* A/ a+ e: g3 N$ V3 X) r% A/ g+ Q
// modelActions ActionGroup at particular times. This( L: u$ ^- x/ w. ?8 R% o
// schedule has a repeat interval of 1, it will loop every
9 x- G: ~* F6 ^! l // time step. The action is executed at time 0 relative to* j/ A' F9 U) o- ]% Y
// the beginning of the loop.1 z8 ~ L5 d: |7 E+ c
0 h; l9 I- [, X( ~1 l
// This is a simple schedule, with only one action that is. T M" \# G [( h
// just repeated every time. See jmousetrap for more
: i$ n; q' J4 O0 R // complicated schedules.
' `3 f; F2 m$ C$ {
6 _: r' b4 z9 L5 z& C! f modelSchedule = new ScheduleImpl (getZone (), 1);/ B8 W9 U1 ~ Z' [! X
modelSchedule.at$createAction (0, modelActions);+ e1 |) x1 T5 x3 o! _' D
' ~8 f) u% z" O+ d5 R+ A: c& n; E* G return this; L3 ]# Y$ ]* G0 A
} |