HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! ^4 _; b' e5 U
2 x1 q/ s V4 T* ?7 Y' h6 i) ~5 [ public Object buildActions () {. F+ l- I* w) Y! M" ?
super.buildActions();
+ D7 n+ H/ d# n5 w# a) Z; d4 O( g
% j( p' C0 [/ t+ s: U R- s // Create the list of simulation actions. We put these in
; _5 n/ G( g0 a // an action group, because we want these actions to be- t; n% d' |; e+ M
// executed in a specific order, but these steps should
- h+ p+ k) W( p# j# D, }. X3 n // take no (simulated) time. The M(foo) means "The message
c' z! ^' x: f7 ? // called <foo>". You can send a message To a particular' z/ I* p7 v) S& |+ {1 ?
// object, or ForEach object in a collection.# i; j1 J( z* j$ r# T$ ]8 }5 W
/ i1 Y) i: ~. l7 b3 H- M // Note we update the heatspace in two phases: first run* U( x' c1 L9 }3 d, N
// diffusion, then run "updateWorld" to actually enact the+ l0 ~7 l9 z- z: O
// changes the heatbugs have made. The ordering here is
, c) @. Y8 V& H7 d // significant!3 I' d. F% g1 k' U; b9 J$ w
6 F% v5 u# j& k // Note also, that with the additional
2 F( O x, w% k4 Z1 u" ~( t" C4 T // `randomizeHeatbugUpdateOrder' Boolean flag we can4 v4 ^$ @. F' h. x
// randomize the order in which the bugs actually run2 W' |# ]! P5 d( |0 S% T
// their step rule. This has the effect of removing any
9 [& b8 y# A* E8 O& i // systematic bias in the iteration throught the heatbug
. H% O* ]8 G' j! f b. j/ I R // list from timestep to timestep
+ G# P1 F/ `* | - w# S& J! ]! O3 W. J
// By default, all `createActionForEach' modelActions have: X* V! M+ _" B4 b% K
// a default order of `Sequential', which means that the
3 g# J4 y. Z6 G% M. @ // order of iteration through the `heatbugList' will be2 k; ^, M9 u, W
// identical (assuming the list order is not changed
( G8 ]: H _4 k2 Y: a) z0 F // indirectly by some other process).7 p' Z4 |' D7 w# l9 @0 d1 \
" c9 U3 _( p7 d# j, \ @
modelActions = new ActionGroupImpl (getZone ());1 z+ w4 C. b" J6 Z/ |" w
# h4 [/ P& I# L6 M( R! g: |
try {! W2 m7 d# n2 }- P5 M+ G7 [. I
modelActions.createActionTo$message' m* x: s/ x) j5 _
(heat, new Selector (heat.getClass (), "stepRule", false)); h5 \$ s6 e4 L- p/ |1 C
} catch (Exception e) {
$ E: d" R2 q7 e7 [/ p7 ? System.err.println ("Exception stepRule: " + e.getMessage ());+ G) Y! Z2 k- k
}! \# L: f: L6 o
: t0 g/ s& |2 j# A/ K try {
; O- a2 Q3 Y$ }# `4 T# `7 ? Heatbug proto = (Heatbug) heatbugList.get (0);
9 v" v( D( \5 I3 ~+ Z3 Q# o$ Q Selector sel = X( g% X: ?7 ~; b* Q* [
new Selector (proto.getClass (), "heatbugStep", false);2 ]" f p. M! ^9 d7 j' i, {
actionForEach =
7 E+ Y! g q' N modelActions.createFActionForEachHomogeneous$call
4 N* t9 z4 N- E7 K- f (heatbugList,9 S& q y+ R* U% O( U2 C/ Z% l
new FCallImpl (this, proto, sel,
7 O0 N+ ?& E* g& n- I new FArgumentsImpl (this, sel)));
( B5 {. g5 d# ~ } catch (Exception e) {- c9 k0 z) R* f0 u! r) k j
e.printStackTrace (System.err);: Y2 h4 a3 h: O
}4 T) e# o, d+ R
- K+ A$ q0 t% p6 k7 ]
syncUpdateOrder ();
3 V" \* f; L* r2 s/ J7 b5 B- ]2 e0 x8 {* u( z* q& d8 D
try {
+ y, v- }$ @/ ]' K* `& a: W' e8 q" l modelActions.createActionTo$message
6 k$ S' `5 K* ]: s; [7 @: H (heat, new Selector (heat.getClass (), "updateLattice", false));
7 R( t; y O" ]- a } catch (Exception e) {$ r* @* s8 U' x; x
System.err.println("Exception updateLattice: " + e.getMessage ());
: |' R3 g& K# @ }. w- S& o5 n0 s7 |
7 [" Z9 v. F2 M! l; g
// Then we create a schedule that executes the8 R% g! t1 z* |0 p- t: D
// modelActions. modelActions is an ActionGroup, by itself it1 _8 }% n+ h: V7 ^ T3 i0 X
// has no notion of time. In order to have it executed in
0 c# a8 P5 ~8 h, `8 A // time, we create a Schedule that says to use the* z* T5 D" F) h9 R" V5 p$ Z. W
// modelActions ActionGroup at particular times. This% l/ L5 \! q, C: i' P" z' t
// schedule has a repeat interval of 1, it will loop every
! o! a& `; N% i, K5 O4 p // time step. The action is executed at time 0 relative to
( R' O o4 n# [. O& k // the beginning of the loop.; ]1 N* d, u9 t9 f- K
1 C4 H' V; f7 d3 s // This is a simple schedule, with only one action that is
p/ f `8 [6 u, i7 _5 I // just repeated every time. See jmousetrap for more
6 D! X0 e5 f3 a, I' F( z // complicated schedules.
* p1 [: X# B. p c% L% K4 @
* k( M( J1 b% f ~5 a( I; V6 l modelSchedule = new ScheduleImpl (getZone (), 1);
" r d0 B/ n/ q+ ?, }7 V5 v modelSchedule.at$createAction (0, modelActions);2 b4 X2 f% S4 x7 o o9 A
) B, q6 D. O- e
return this;3 @9 N. L1 v* a: H( ]! v& m5 H2 e. R
} |