HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( j, t& J2 ?9 c: r5 \. v1 D0 F% b- V/ W( {
public Object buildActions () {
: Z" z- l* B" [ super.buildActions();
+ N R5 k+ ?0 Y8 Z
, p1 l$ R6 n- Y! ~3 E# `4 u9 w3 B, p4 u // Create the list of simulation actions. We put these in
) J2 L; h" E5 D5 d/ L9 x! k // an action group, because we want these actions to be# j4 S) F; C+ l0 ^1 L4 G
// executed in a specific order, but these steps should. g m" p) F O: i; C# u
// take no (simulated) time. The M(foo) means "The message& \! @2 E+ j& n5 {7 \% d: t, o% c1 H
// called <foo>". You can send a message To a particular. X+ }# Y, x' a- ]9 ?9 M
// object, or ForEach object in a collection.2 p* N! W2 h, w" I* O
! H6 Y7 y, B8 p/ V# Y$ ] // Note we update the heatspace in two phases: first run
- M3 U7 Y, B; b0 _8 \& u9 f1 z // diffusion, then run "updateWorld" to actually enact the6 h4 `$ @3 N/ p2 r) Z
// changes the heatbugs have made. The ordering here is" {7 q" I- z/ u0 U: C5 C7 n
// significant!
$ H1 b% s6 K9 U
: m% q6 V1 g W9 e // Note also, that with the additional
1 u0 v, q2 G: Z" ^- L$ O j6 p // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 l$ }% L% G) X1 m // randomize the order in which the bugs actually run
: q6 a) W- Y" r" z% F! Y$ E // their step rule. This has the effect of removing any
/ C% Z( P8 U ?( Q // systematic bias in the iteration throught the heatbug( Y9 e5 U- I/ c
// list from timestep to timestep) m' N0 J% b! I# J t2 V/ U
0 ^/ H, p1 m7 j; L* \. \$ F' [+ t3 Z
// By default, all `createActionForEach' modelActions have
# O7 C/ B8 c. l1 d. ?9 {4 @ // a default order of `Sequential', which means that the0 t5 P7 q4 S0 y0 ?8 A4 ^
// order of iteration through the `heatbugList' will be
. L: r6 i) G; N3 x // identical (assuming the list order is not changed, F: q- z4 G, q8 @
// indirectly by some other process).
7 {+ M( R; \6 W; n( r # b$ V, `9 I0 ], R; J
modelActions = new ActionGroupImpl (getZone ());. j6 N5 O) l' ~! I
$ y( m+ E& w5 V/ i5 T' I# u; W P try {. I( w, j, M4 W3 \) @3 q! K6 `
modelActions.createActionTo$message* I+ E% D! c1 P% s: Z6 o# O
(heat, new Selector (heat.getClass (), "stepRule", false));
; P& a3 r N3 s7 N( W1 n5 N } catch (Exception e) {& T+ A4 W" j* S7 ~
System.err.println ("Exception stepRule: " + e.getMessage ());5 c( a0 c7 y9 [/ d
}
" g3 _) Q6 T" ]7 a+ |' `) B1 g S: {/ P1 ^- n1 Z" K4 K9 ]; @
try {2 I% N% X Q1 v j$ v# P0 t
Heatbug proto = (Heatbug) heatbugList.get (0);! w; N6 M5 h1 w0 u- }
Selector sel =
' \7 u9 r7 H" O5 N9 R. P/ `6 ? new Selector (proto.getClass (), "heatbugStep", false);
$ |, y# @. Z. c" Y2 c9 B actionForEach =
. ~- Y! T: T; Z' f( q4 H/ C modelActions.createFActionForEachHomogeneous$call
$ |8 _* {" d! J5 [( \( D (heatbugList,
2 v: e0 w! e/ ] u4 E) I4 I# y new FCallImpl (this, proto, sel,* K4 N, J4 l) b. M/ X7 a# _7 c
new FArgumentsImpl (this, sel)));
9 \! j: e. m* r' f } catch (Exception e) {
8 b. k) W) ^: Y u+ Q0 y, t e.printStackTrace (System.err);
2 n+ N" Z) n a( j4 [ }: R F. P/ A, y- N
) x' t( ?1 f9 h L$ [( S
syncUpdateOrder ();! f8 d, p+ [. b9 _- r
/ B/ x! f4 t; a
try {0 M; D7 k+ ]: p+ l7 W
modelActions.createActionTo$message
9 u8 M8 k0 ~6 Q- j, p4 C1 g (heat, new Selector (heat.getClass (), "updateLattice", false));
1 d2 d* a+ h/ m Y. o& L } catch (Exception e) {8 a/ {2 m' e6 Y0 W, L3 q
System.err.println("Exception updateLattice: " + e.getMessage ());% P5 b7 e7 _7 \% ]! q
}7 b& z6 @5 l( l, c. ]
" S6 y* V9 U0 A$ E( ~
// Then we create a schedule that executes the
' J. W( D' A' w6 i // modelActions. modelActions is an ActionGroup, by itself it! @) ?& V( P4 R2 d. }
// has no notion of time. In order to have it executed in. @& W0 `' E0 y( |
// time, we create a Schedule that says to use the. T. B) b5 i! [( E2 c7 \5 n
// modelActions ActionGroup at particular times. This! ]# l6 J* R6 [. T( x) B
// schedule has a repeat interval of 1, it will loop every
* J. i) s! f$ e. ^7 i- c7 ?3 ^ // time step. The action is executed at time 0 relative to; C- q3 b4 A+ r L1 C/ q# R
// the beginning of the loop.
( V2 x9 X0 G( o) [$ x; K4 p' w( d" }+ {8 \7 \
// This is a simple schedule, with only one action that is
) Q) D6 h' k. ~! c // just repeated every time. See jmousetrap for more
* t( [- ~( v) G n // complicated schedules.
. a5 m6 u8 J4 M9 W 9 ~" ~6 o- o( l
modelSchedule = new ScheduleImpl (getZone (), 1);/ m; r- B8 ~+ w; A4 z; W
modelSchedule.at$createAction (0, modelActions);& A- C2 U$ u# _0 B$ a4 S" O
/ r9 {0 p- k% b0 G4 m% _ return this;
- U$ J* S+ M8 ~+ E7 j! H) b" J } |