HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 S$ j2 N2 Z2 W6 |2 c2 w, z i& F% w' b
public Object buildActions () {
8 L. D3 T; r4 g- `0 J0 M* t6 n super.buildActions();
0 o) w' j% c( U2 I+ ]/ E+ b
+ Z' t$ C7 N* B% }' k$ { // Create the list of simulation actions. We put these in6 I% P$ O0 L* a/ l# ? N
// an action group, because we want these actions to be
% i4 e5 V! e6 U* s, i. @( Z // executed in a specific order, but these steps should8 [- z% J; `6 S7 o, u8 M
// take no (simulated) time. The M(foo) means "The message* U# F3 y, f& {' t- N+ j& a0 ?% @, O
// called <foo>". You can send a message To a particular
) N8 j6 s2 l) x) ]# o3 m- d // object, or ForEach object in a collection.# [8 j$ _% [# @% m# X: U9 ^
; F( Z4 r& G/ R1 y' _# Q
// Note we update the heatspace in two phases: first run( I- c2 X! I/ N! ?
// diffusion, then run "updateWorld" to actually enact the
1 z5 }/ Y! m2 K i% B // changes the heatbugs have made. The ordering here is/ q) o. N& B& q3 l
// significant!# g" Y7 U" D F. T! `. p
& c8 |& G& Z* d
// Note also, that with the additional
* C+ e3 Z! V! c1 d# } // `randomizeHeatbugUpdateOrder' Boolean flag we can
! m% `5 c. ^3 q8 r9 |6 E7 @ // randomize the order in which the bugs actually run% V# t# _) k3 ^- G( W: W
// their step rule. This has the effect of removing any( `- H. _0 _* k# K1 d) ]
// systematic bias in the iteration throught the heatbug
/ c; P' m* @, k // list from timestep to timestep
7 }# e, B; [1 H% D
+ Y9 k8 t& ^5 n) u: W // By default, all `createActionForEach' modelActions have
. Z/ t9 g/ q" R. O$ C* N' n // a default order of `Sequential', which means that the
) x9 [. s6 \% l' S, | // order of iteration through the `heatbugList' will be
' E" o+ l' K% O/ Z // identical (assuming the list order is not changed8 Y: R( I" t6 D; x
// indirectly by some other process).% X$ j+ P$ [4 j1 B
1 ^& e/ v9 J3 Z- m; W$ s, } modelActions = new ActionGroupImpl (getZone ());
0 ^3 c1 b$ G* W. T
" P. M- i9 y) s3 U try {
5 {% m/ Z' E+ y7 c modelActions.createActionTo$message
p, U) A7 e9 X' M* C0 z- d (heat, new Selector (heat.getClass (), "stepRule", false));8 ?$ Q9 q* R0 b/ W/ z7 Z
} catch (Exception e) {
9 A. n" z* |0 J" R4 @% q System.err.println ("Exception stepRule: " + e.getMessage ());' {$ M1 L( y; @' W( y
}( {0 ^5 n" L* J& b
) L) s" c1 p% @3 f3 l7 w6 X try {8 X1 c7 {) J* M4 N2 G# h
Heatbug proto = (Heatbug) heatbugList.get (0);
h& ?$ _2 B: U* x p Selector sel =
2 g8 h% q6 d5 e0 `5 ?5 W new Selector (proto.getClass (), "heatbugStep", false);+ P9 G7 |( Z6 N# Q0 F
actionForEach =
6 m y, M% L/ |$ j$ k modelActions.createFActionForEachHomogeneous$call
" p. Z3 t: X0 I; R* I (heatbugList,
- H% ], F/ y: V. _3 Y1 w5 B; u new FCallImpl (this, proto, sel,! [+ Y8 T) l* N b/ \; }7 K' R
new FArgumentsImpl (this, sel)));
) s% _9 }: d4 v! E: S# u+ ], b } catch (Exception e) {
* i& g4 }0 Q- T4 Q' T e.printStackTrace (System.err);
3 d9 G/ v! w$ j6 r' L* f }3 c. V3 o: i- W/ T5 [8 t
F; l7 y( R; z6 Z$ d syncUpdateOrder ();, O, r2 m5 b* c5 G7 [
' o1 V1 c! |+ D" q9 f try {
: w, ^4 a/ {0 R: m& u4 {! U modelActions.createActionTo$message
$ L2 ?$ D: u7 [% X& I (heat, new Selector (heat.getClass (), "updateLattice", false));6 n* K- H5 a7 E C! i/ R7 i
} catch (Exception e) {6 X+ g* Y( F- S: I7 W
System.err.println("Exception updateLattice: " + e.getMessage ());; f5 x' F: {/ r, u& O4 H( O2 l! `
}- t0 M7 W& B7 c% H4 k
9 m1 Z: T* ?6 z8 i# v$ D
// Then we create a schedule that executes the- V6 I5 n. p3 s( B3 i
// modelActions. modelActions is an ActionGroup, by itself it
) z) \& O r9 ^; f5 c6 J# H, S3 @ // has no notion of time. In order to have it executed in
2 G( i7 q. p- [! I // time, we create a Schedule that says to use the) j- z# w2 K5 p% R0 M1 h
// modelActions ActionGroup at particular times. This
0 R, f$ ^5 c* z8 _3 t, B // schedule has a repeat interval of 1, it will loop every& @8 n1 j1 C$ J# b' |: |
// time step. The action is executed at time 0 relative to. f" i+ d8 g# I/ D4 y+ u
// the beginning of the loop.
U, f' }( L7 I& V+ ]0 G" ^$ j5 D( a' ?' y k) f a6 r/ Q, h
// This is a simple schedule, with only one action that is
/ i9 G$ _! V" U* ^! g" g // just repeated every time. See jmousetrap for more
/ ~6 ~+ |) b. H% }0 T- {% w/ j // complicated schedules.6 p0 O( d, ]7 S5 u' H4 W
, Y3 u+ o. a* v9 M# B modelSchedule = new ScheduleImpl (getZone (), 1);
$ O! B9 t( n5 | modelSchedule.at$createAction (0, modelActions);
9 s6 E3 g1 p7 t6 P
2 V. |3 g. V. Z0 ?- c return this;
; c' |' m9 X; C6 v0 K } |