HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 n* {7 d! G9 W5 F
9 \8 O5 E& J! s$ q/ d; p4 |/ y/ g public Object buildActions () {( X8 S& E, L: J" p
super.buildActions();
. s, [9 B( A Z
* ?! e& {" h. W4 D3 x4 U! j3 i // Create the list of simulation actions. We put these in6 a3 K$ c. R, p& K& z9 O
// an action group, because we want these actions to be) _' O! S+ ]; k8 H- w
// executed in a specific order, but these steps should6 S5 v! @0 X3 t- g
// take no (simulated) time. The M(foo) means "The message( F% F$ a1 e$ _# r' z7 O# L* f
// called <foo>". You can send a message To a particular( M* D3 V/ \- o
// object, or ForEach object in a collection.
2 V- x; u" N: \8 T
, I9 z f5 S# v0 k# g6 T7 A# [ // Note we update the heatspace in two phases: first run
1 p1 P" t5 a! c // diffusion, then run "updateWorld" to actually enact the
" }2 {4 E: k' y y // changes the heatbugs have made. The ordering here is
- \5 u, s7 R1 j* z // significant!2 u! H( T9 h" \" h9 w4 a% p" H
y8 v! z& {+ O2 ?0 T // Note also, that with the additional
& G3 d4 B$ O9 m! {7 n& P; n // `randomizeHeatbugUpdateOrder' Boolean flag we can; F# L7 d! O* x# t, c8 D% }% s* r) _
// randomize the order in which the bugs actually run
: K* [ }( y q6 N/ `+ h // their step rule. This has the effect of removing any
& m p; J/ J* t2 f% ?( X% X // systematic bias in the iteration throught the heatbug
3 T7 u6 ~* ^2 w; \5 Z1 a // list from timestep to timestep' s! |9 Y) I: v
: s( v9 I5 Q9 h+ ^- M" H5 N/ g // By default, all `createActionForEach' modelActions have
1 F8 O. r$ z2 q6 o7 {0 N // a default order of `Sequential', which means that the
, F* s/ _3 Y2 O // order of iteration through the `heatbugList' will be: Z9 ?8 `8 ^9 @! G U( a
// identical (assuming the list order is not changed
( {; `& S, e" h1 g! g" Q // indirectly by some other process).& b" R3 S1 v% G, X
/ N- X7 b- k5 x# J
modelActions = new ActionGroupImpl (getZone ());
8 W& h/ R* W: n' F9 E& t& W0 V) k
9 Y R% _" u* N+ ? try {6 h$ Z3 n3 s8 ], v0 _7 ^: {% w# S
modelActions.createActionTo$message
1 ~$ a$ W7 {6 s; m6 [7 b! g (heat, new Selector (heat.getClass (), "stepRule", false));8 U& z* _/ o8 w7 n. `, I; @
} catch (Exception e) {2 g ^# u# q0 k' x1 ?2 j, s
System.err.println ("Exception stepRule: " + e.getMessage ());
" H6 w6 z8 q& l& Q+ J% Y }% r/ P0 D4 V/ B3 y2 x5 e
9 C Z4 I: u* m) c4 R try { R( A6 U! b5 i. i7 t+ C, ^
Heatbug proto = (Heatbug) heatbugList.get (0);1 u/ Q5 I) T2 F. n$ Y N! Q
Selector sel =
% q% Y: O7 i# | new Selector (proto.getClass (), "heatbugStep", false);# W. M& o C, I+ z
actionForEach =
' N ]& ]0 ]2 y: n modelActions.createFActionForEachHomogeneous$call
, L0 ^6 x& |8 P9 D (heatbugList, j% J; C# D z: `$ K; k& }
new FCallImpl (this, proto, sel,. }2 y0 z/ j5 M$ y/ A% K
new FArgumentsImpl (this, sel)));
0 J) M& T9 l+ ^' ~ L } catch (Exception e) {. B s9 j# j; g7 ^3 z2 j
e.printStackTrace (System.err);, a! T6 D( S- s& G( ^ |( {0 g2 d
}! U F q) Q' g6 [! _ ]- `
7 y4 h) K" t# g" y: o) F f1 k syncUpdateOrder ();
: R, C F9 y0 B, Y6 Y5 ~, Q# U8 u; |; P: }& @
try {
* F: U% V2 A( p: _7 _ modelActions.createActionTo$message
$ M. q% v$ m& K" y& z# H) b9 T (heat, new Selector (heat.getClass (), "updateLattice", false)); W' C- B( i# N' `: p6 W, E
} catch (Exception e) {
3 y9 S+ H% _/ P( x1 Z System.err.println("Exception updateLattice: " + e.getMessage ());
- L3 R1 q* C1 s/ W; t- q/ y5 ] }
: L. K& |' z9 m3 n( N/ O \( c 5 M% P" O6 G5 H. r2 L1 J
// Then we create a schedule that executes the* P, l* L, d; V* f
// modelActions. modelActions is an ActionGroup, by itself it
: {# h" v/ _, l, t0 g // has no notion of time. In order to have it executed in- O6 _9 V" y: L O
// time, we create a Schedule that says to use the
4 C3 z: f2 a9 c Y // modelActions ActionGroup at particular times. This4 B/ d1 D, ]2 N6 N: H, u( p
// schedule has a repeat interval of 1, it will loop every
% ]' t9 a2 ]) M7 O! v // time step. The action is executed at time 0 relative to5 @* O0 k3 F: K4 n6 o) x
// the beginning of the loop.
; z7 l- v) P" O2 s4 x" ?
% F' O1 P F+ q8 U) N, l // This is a simple schedule, with only one action that is+ n. D& v7 {" c
// just repeated every time. See jmousetrap for more2 R Y+ d6 j, L6 A
// complicated schedules.
* F% T3 B( Y; ]6 E- Y/ U# }4 b
$ [" @6 j' C" Y) v modelSchedule = new ScheduleImpl (getZone (), 1);
+ R/ p H- a/ I i( D. l( R modelSchedule.at$createAction (0, modelActions);
, `/ y6 Q4 p. d, ]& L! s
/ h. k* |9 J+ M1 b# e7 O return this;/ E4 N, H( I! J7 N4 r9 J4 G6 K1 @$ Y
} |