HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: P8 U3 H* N4 L
! J$ \" ?% Y+ s# j3 y public Object buildActions () {
1 K9 q2 |8 S7 O' L4 } super.buildActions();/ t! O! `8 e- E5 U5 D* }9 n
. Y% G7 p1 r* ~0 C' f
// Create the list of simulation actions. We put these in. |: C# s3 K, x3 b S7 n
// an action group, because we want these actions to be
* R, Y, r3 q& m" n4 K0 L+ W' \6 D* w9 L // executed in a specific order, but these steps should8 p- l% g( p& P3 e m5 I9 U% J- T' N
// take no (simulated) time. The M(foo) means "The message! C: ~' p/ Y# ?! T/ C$ _
// called <foo>". You can send a message To a particular
" s0 Q& } H. [" k' p // object, or ForEach object in a collection.
# o: t) ]: W: E) _3 T# m: l
( i# T, O$ \3 O6 y" \% Z* T. B4 o- A! o // Note we update the heatspace in two phases: first run
9 |9 O: y" I' V- G) | // diffusion, then run "updateWorld" to actually enact the) s% W9 X9 c* X# \# N
// changes the heatbugs have made. The ordering here is
! J! @5 m7 e5 B0 W0 J: s // significant!3 P& A7 e K* `+ V9 \) g# m' K$ U" C
' T# Q# k9 N* a( X, Q D' q // Note also, that with the additional
8 i$ i. c8 K5 _% f7 z& ? e/ X# o // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 {9 D" x: a3 I, V // randomize the order in which the bugs actually run
2 n# E3 Z' @# a7 j& A5 x; ~! q3 w // their step rule. This has the effect of removing any
: Z* Y3 p8 S0 v3 y, v // systematic bias in the iteration throught the heatbug
- |( y+ l3 r. i& H' x // list from timestep to timestep" g5 A& w c. f- G& y
h( i1 q- }& k8 U
// By default, all `createActionForEach' modelActions have
, Z8 [1 [0 i! q$ I8 M! ~ // a default order of `Sequential', which means that the5 s; ^9 R" ^1 t0 M1 R4 C2 {
// order of iteration through the `heatbugList' will be5 m/ _; A& Z+ Y3 i' `2 H0 m
// identical (assuming the list order is not changed
) z, _$ w4 g' }" i6 C* J+ W r // indirectly by some other process).
1 p5 D& W) C8 f( h $ S6 i/ `! v' t9 K% E2 _
modelActions = new ActionGroupImpl (getZone ());" a ^5 ^) R& |6 P
* l4 K7 D8 t0 c3 G) T8 x" M; `1 V& l
try {* t8 D. ]! W- z) i+ \; w
modelActions.createActionTo$message
8 c: m4 u9 v% } (heat, new Selector (heat.getClass (), "stepRule", false));4 `* ]: `) A0 m% F; n9 G
} catch (Exception e) {$ O8 b1 x" y2 U3 l
System.err.println ("Exception stepRule: " + e.getMessage ());
V' C# _/ [+ e4 [# F }
; [- @. t3 ~4 C9 H
8 H4 p- R5 @3 _) u6 a try {0 Z2 g' }, B3 k! T! h0 z. |
Heatbug proto = (Heatbug) heatbugList.get (0);( \# l' P/ B( }; g
Selector sel =
2 j) b4 x! F3 h+ g" n new Selector (proto.getClass (), "heatbugStep", false);( j/ e/ I0 m4 I4 {2 A! z: A
actionForEach =+ @0 n7 L1 p5 V) H- ~ E6 ^
modelActions.createFActionForEachHomogeneous$call0 h' ]2 ? H. y! l ]8 ]: V
(heatbugList,5 |5 A3 @3 U/ H9 W: z
new FCallImpl (this, proto, sel,2 f1 D* R% J7 s! n/ w
new FArgumentsImpl (this, sel)));
2 G2 j: I+ h7 @ } catch (Exception e) {
8 k; z' d9 W' b0 e e.printStackTrace (System.err);" F( ] q8 j5 Z8 v6 Y
}
: R- w, z) ~ J) V
) h8 H$ p5 C% t# {6 {, O syncUpdateOrder ();. G' G# D, y: M8 ?4 Y0 Z3 R
, z( {: h( a& B! E2 L( y
try {9 x: N9 e0 X6 G9 [4 m, V5 o ?9 Y
modelActions.createActionTo$message - o$ D3 l1 ]! @" o( J/ t
(heat, new Selector (heat.getClass (), "updateLattice", false));. Z" P6 J5 S: N( J4 V% {5 X
} catch (Exception e) {; `3 C4 b) J1 a# V" a4 Q
System.err.println("Exception updateLattice: " + e.getMessage ());* k- _! W. A: _& `
}
& w: y* f) k1 ?% C2 ]
6 L$ @8 i; P8 Q8 _( J) s9 X // Then we create a schedule that executes the3 A2 _, E% h- Y& U" H: P+ ^
// modelActions. modelActions is an ActionGroup, by itself it( R) ?* v, s- t, v A( c2 E
// has no notion of time. In order to have it executed in( w8 J1 D) ~9 w E4 M8 w
// time, we create a Schedule that says to use the
9 W! X7 U( X4 f* W1 r // modelActions ActionGroup at particular times. This1 _+ t0 Q$ H: F5 k% ]1 {
// schedule has a repeat interval of 1, it will loop every: a, D, G4 k, F G* H% L
// time step. The action is executed at time 0 relative to
. ~+ w$ }1 q/ u. p5 f // the beginning of the loop.+ p( w, [ b5 B" R6 P
% Y" H$ P1 N. N! @9 b
// This is a simple schedule, with only one action that is
7 ?- N8 ~. e- T+ v1 G // just repeated every time. See jmousetrap for more" A1 l% D* ]$ b4 L/ [4 `! x ^
// complicated schedules.
8 r6 s- `1 C( M8 _1 j$ V* f . u% E5 G% Q" p2 e
modelSchedule = new ScheduleImpl (getZone (), 1);
' Q/ O# M* j8 p' v6 ~ modelSchedule.at$createAction (0, modelActions);
: d' _" \) p- H
* c3 R4 \' | w return this;
# b% ?5 E9 t- ^1 o) O } |