HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- J a1 \) v' F- d2 z
0 [3 D5 K9 ?0 {3 @( D7 U public Object buildActions () {( E; N4 s" v# ^( u5 Z% c2 J4 Z
super.buildActions();; |9 r8 q8 f; ?' O0 x
K2 l7 I+ q2 X7 y, Y // Create the list of simulation actions. We put these in i& p4 b" ]2 w1 ^( R
// an action group, because we want these actions to be) J3 j9 ?8 S2 B$ e' R
// executed in a specific order, but these steps should
$ v3 Y3 V# S4 N* [4 ? // take no (simulated) time. The M(foo) means "The message
) t- U3 Q8 ]7 E // called <foo>". You can send a message To a particular3 ]4 \8 {8 r9 c
// object, or ForEach object in a collection.
- N# y3 Q/ g% H4 t# ~+ z% @# M
- u8 W# B* U: s* M& h, v* N // Note we update the heatspace in two phases: first run- y. p- \3 ^3 b | y7 i
// diffusion, then run "updateWorld" to actually enact the
- Y8 r3 @' Q1 [* B& I // changes the heatbugs have made. The ordering here is
4 V/ A D$ ~6 h! u6 T // significant!/ _& I8 t+ d& @ k0 u
, v. j5 a0 J' E# ?. Y& \2 g, d
// Note also, that with the additional
3 U: J5 \, s5 c5 j // `randomizeHeatbugUpdateOrder' Boolean flag we can) ~9 N/ y3 ~$ r9 H
// randomize the order in which the bugs actually run2 }! ]- ^: o$ X! J
// their step rule. This has the effect of removing any g4 b, p i- l3 _4 v2 s1 f
// systematic bias in the iteration throught the heatbug) `, [9 C6 ?8 Y- B- G, N! V
// list from timestep to timestep
& s8 A- X6 i# n- M- N9 a( B
1 F" G( r, u' s // By default, all `createActionForEach' modelActions have/ c5 p5 u( {1 n( W- d
// a default order of `Sequential', which means that the) N Y9 M* r' j( G5 w! }
// order of iteration through the `heatbugList' will be: A/ k3 g+ u" H0 ?( z& G; s
// identical (assuming the list order is not changed1 f8 ?, N, J9 l* E! n/ i
// indirectly by some other process).3 v+ `0 e" E0 n" F0 `$ p
& J8 J# P- V+ r; b6 k/ K
modelActions = new ActionGroupImpl (getZone ());
0 T% R! `! R" O/ I Q
# ]% H4 P' M5 {& @8 H" ] try {
, E2 O" k3 V7 h1 J0 ~/ N! s modelActions.createActionTo$message
- f: r' p/ @0 H* j9 S& T; N (heat, new Selector (heat.getClass (), "stepRule", false));
0 f6 N( A# O4 L$ _6 z. S" ] } catch (Exception e) {
! }9 D( y: q. b$ S x System.err.println ("Exception stepRule: " + e.getMessage ());
$ F9 `( O: A8 S! P$ q }
( e% n0 _/ J) F4 k6 `: L9 H8 P
- v# I# T% s6 f0 h$ b: S% s' s try {
" b+ ^6 K3 |: L( m B Heatbug proto = (Heatbug) heatbugList.get (0);
" R& ?" N2 m7 ^1 n Selector sel = 0 y- u) I0 U! o
new Selector (proto.getClass (), "heatbugStep", false);
3 ^+ G& b9 Q! Y: X; g7 ^$ k. [ actionForEach =" O. S0 x- J& i/ k$ m) h
modelActions.createFActionForEachHomogeneous$call
; E8 l* F0 e2 y- Z1 U* w6 L' ^ (heatbugList,
/ C" A0 P7 M: o* i9 Z2 m new FCallImpl (this, proto, sel,
( R, \ s: H/ n. T9 \! B2 q; h new FArgumentsImpl (this, sel)));
( e4 j$ [2 J) h4 K } catch (Exception e) {) M3 x2 E2 j& j! b7 ?7 S1 y! W ]7 o
e.printStackTrace (System.err);% q! W2 i. Q* P! \5 u/ e% @2 v
}) V, W% D6 R, p# u* f
, S/ j$ W! k# {: Q; ~
syncUpdateOrder ();; ^6 X( v2 M9 O5 r1 a0 n+ I
2 k. R' b4 c: @9 `
try {* |! j! y, n5 z* j& Q
modelActions.createActionTo$message
0 h4 f4 N' M9 N/ O3 P* p* U (heat, new Selector (heat.getClass (), "updateLattice", false));0 D" F/ _$ n8 m2 w) q, X
} catch (Exception e) { I( t H0 p u
System.err.println("Exception updateLattice: " + e.getMessage ());- |( @9 c( s3 r! q- f
}
. [; S, r- a, d( F. S 0 q" E$ o3 f. ^# h$ g0 |# y
// Then we create a schedule that executes the- n9 `7 `& y# B6 Q
// modelActions. modelActions is an ActionGroup, by itself it% L u6 @. H& [5 R0 I( s l
// has no notion of time. In order to have it executed in
7 o0 P9 H, ]2 J- k+ K! M% q9 a // time, we create a Schedule that says to use the
! w7 v1 s3 Y9 l B2 a$ l' f+ X // modelActions ActionGroup at particular times. This
- B/ l$ B# p# z. u' O // schedule has a repeat interval of 1, it will loop every
+ n1 N" h- {' R0 T // time step. The action is executed at time 0 relative to0 {9 K8 \. ^" a
// the beginning of the loop.
. A2 K. J1 h6 I& C
! ^. N% [9 d# S4 L // This is a simple schedule, with only one action that is% e. x, e* h4 W4 o2 |, H
// just repeated every time. See jmousetrap for more; ~ a' U. U7 @ v
// complicated schedules.# c! G7 J" ]( E2 e( L: C
$ A5 f0 M, B# ~2 X% d! K+ c modelSchedule = new ScheduleImpl (getZone (), 1);
& I+ N/ `% |0 c2 I modelSchedule.at$createAction (0, modelActions);. T( g* s. K% D0 \
$ Z# |+ |: e f) H0 M+ y9 i2 z
return this;
6 `6 J% A) |& S& [9 k } |