HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
D3 b; H3 B" ?1 B- o" n% c6 Y) ^6 P) e7 P
public Object buildActions () {
4 r8 v6 O3 M% y( L super.buildActions();: M$ U! {4 d' S, V+ x( ?
- p6 e, p' v( V* M. V // Create the list of simulation actions. We put these in
- o9 O6 B: ?7 @4 m$ d2 p( U( B/ N- g // an action group, because we want these actions to be8 Y3 I! K' X: a
// executed in a specific order, but these steps should
1 W) z' b: w" `7 R // take no (simulated) time. The M(foo) means "The message0 t0 G( D2 q& x' c* u) S, q# y% o
// called <foo>". You can send a message To a particular% ?: m, N9 j+ _ @$ m% y
// object, or ForEach object in a collection.
+ J" d, h+ e% K6 l) J
' ?% M6 H6 `! `5 N. L // Note we update the heatspace in two phases: first run6 T2 S( R; T2 c$ i, |0 r! P
// diffusion, then run "updateWorld" to actually enact the3 X$ p4 Y1 d1 x
// changes the heatbugs have made. The ordering here is
! c9 Q4 l% t3 U; q // significant!0 Y3 K# c0 D* u2 _6 U
' `4 p( }' }% p; V$ `2 M+ Z4 ?
// Note also, that with the additional/ P' K1 T* ?) P
// `randomizeHeatbugUpdateOrder' Boolean flag we can! [* g8 n" L2 r. h% |
// randomize the order in which the bugs actually run& J) ^9 f1 T) m/ @' a: H
// their step rule. This has the effect of removing any1 {7 u+ X5 m) {
// systematic bias in the iteration throught the heatbug
$ W& y' l; r' w2 Y7 u# @9 d // list from timestep to timestep7 \" z4 U f% G
4 d1 i4 F5 W$ V& F) h* L
// By default, all `createActionForEach' modelActions have
S$ Q q3 r# B0 k4 \! U/ M9 | // a default order of `Sequential', which means that the/ d0 U. \' P+ t: @* u
// order of iteration through the `heatbugList' will be
8 K$ N( W7 r: ?8 ] // identical (assuming the list order is not changed) E! R c/ }1 N. k, b2 ~( Y+ r7 U- T
// indirectly by some other process).
3 u0 J# Q1 z* B
: P: U; o8 d- t" a, _( _ modelActions = new ActionGroupImpl (getZone ());
: U0 Q7 w" b7 u- @! R. F e# l3 |8 ^) P' ]
try {
) b4 E5 R7 y6 z& n modelActions.createActionTo$message
0 D5 \6 f; X$ N (heat, new Selector (heat.getClass (), "stepRule", false));3 K, _. X% f) i& Z; q
} catch (Exception e) {
9 U5 `$ ~, t$ I- v System.err.println ("Exception stepRule: " + e.getMessage ()); N v7 R4 e) s* h/ b
}% F( T7 M: C1 v4 [; _" X
- V( k3 {+ y: w3 g
try {2 S' I y6 Z8 K8 c4 T+ v
Heatbug proto = (Heatbug) heatbugList.get (0);" Y8 G! f' N# M7 Q
Selector sel = 2 c/ s" q$ |0 n7 ?# F
new Selector (proto.getClass (), "heatbugStep", false);
) \% n; t _0 H# k actionForEach =( E! _. i- ]3 S, \. t+ E
modelActions.createFActionForEachHomogeneous$call
! ^" P; P0 J0 j/ V0 ~$ k- B2 K (heatbugList,
& E Z1 }' s8 S- T+ q7 `9 S* g& ~ new FCallImpl (this, proto, sel,
0 I. T" d$ ~8 G8 G K4 t1 n new FArgumentsImpl (this, sel)));2 h' m: M8 p( f' `7 U2 p) c
} catch (Exception e) {7 }) k$ O( a4 w% B
e.printStackTrace (System.err);
; ^; ^+ Y2 |: v }( K( \! g& Q+ d7 G |* v5 Y2 P& p
. [2 d4 @' l+ K4 O' Z" {5 D6 ^+ V syncUpdateOrder ();
% W* e2 i6 o6 F- V. F
. g7 _* N; m' i8 s try {
& Q5 W4 w8 E: C modelActions.createActionTo$message
* W" V" ]# k5 ]" X (heat, new Selector (heat.getClass (), "updateLattice", false));! X0 O) S1 s6 w2 N6 h# \' v
} catch (Exception e) {" q% ?; a; M7 R2 Q4 q9 N
System.err.println("Exception updateLattice: " + e.getMessage ());* f" ~9 c* _0 H5 Y+ A
}
7 I/ s0 x: Y4 ~ 4 \4 O$ m3 o8 ~* C! D* |
// Then we create a schedule that executes the c" R+ X) N( d. D8 C
// modelActions. modelActions is an ActionGroup, by itself it
4 B6 [1 O9 `9 R/ ^* r4 i, \8 q // has no notion of time. In order to have it executed in; B; _# c: q8 e, ~! @. d
// time, we create a Schedule that says to use the
. z1 n. S3 s( ~0 l3 [" x // modelActions ActionGroup at particular times. This
/ Z% a! ]9 w7 d: G! K // schedule has a repeat interval of 1, it will loop every% n; B& J+ [/ d/ e, ?
// time step. The action is executed at time 0 relative to& ?% M9 J, D4 {* M" A2 Z- `
// the beginning of the loop.& D* ^- N1 P, `7 S. X
]: g- a _# `# V- j/ B // This is a simple schedule, with only one action that is
2 O, a, q8 a( I, F // just repeated every time. See jmousetrap for more. D% n1 f! B4 E( A s' |
// complicated schedules.
1 G2 m+ J2 `" F6 f: i9 s: M# U
, {- F( c7 U3 J m" j! R modelSchedule = new ScheduleImpl (getZone (), 1);* H u$ O. J# g
modelSchedule.at$createAction (0, modelActions);" K5 I. u; [8 E7 S$ c6 i8 j
8 o) E$ j8 L6 Y: o) }' @ return this;# k0 a' i% O8 r$ M
} |