HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- f( T- e. @# x% V- D$ U/ C* P5 a* s- x2 w; y- Q+ o$ W" {/ [2 G1 U2 c/ m5 ?
public Object buildActions () { i! E+ M3 [; T' M; D1 q* W& y7 ?$ |7 Z
super.buildActions();
- S6 V0 t5 p% m+ ?5 y 7 w! Q3 ]: f- l
// Create the list of simulation actions. We put these in, q7 x+ k' {1 ]$ C1 o: [ a! _
// an action group, because we want these actions to be
, E9 k; p; _9 i k+ p8 N // executed in a specific order, but these steps should: d5 s% ?7 `2 v7 B% k9 I. @
// take no (simulated) time. The M(foo) means "The message3 M$ v X3 |: u9 d
// called <foo>". You can send a message To a particular% T7 Z M8 s6 D& N
// object, or ForEach object in a collection.7 C+ z: L3 G! M E1 S
! p2 Y; e" \( y6 L; x
// Note we update the heatspace in two phases: first run
- s8 {1 t/ X* M& @; n; n% {; j( r // diffusion, then run "updateWorld" to actually enact the; ^+ M- [# u2 A
// changes the heatbugs have made. The ordering here is* |& n9 n8 r3 @
// significant!
# V& b0 R" n) f7 H, Q 6 N3 k/ i+ P+ c C' R/ f
// Note also, that with the additional
* `/ @/ ] a) T; g. S- J4 y! ?* ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 Q3 b( d9 Z+ g# M // randomize the order in which the bugs actually run# }- |) ]3 T/ B4 N' j
// their step rule. This has the effect of removing any
$ I: D& p- l1 M! L; Q8 u9 K+ w( O5 h // systematic bias in the iteration throught the heatbug
- ~8 n5 c7 |$ r# M2 d // list from timestep to timestep: f% ]) A( _+ d) f6 i+ X7 @2 Y4 R
+ Q3 ?3 G4 A; ?/ @% R r/ K) ] // By default, all `createActionForEach' modelActions have
* {) W% _% R7 b/ | // a default order of `Sequential', which means that the- ?/ u6 K/ \4 O' p- i; k
// order of iteration through the `heatbugList' will be
4 q7 U5 N f7 B( w+ t // identical (assuming the list order is not changed
% R( S; S$ G2 `$ L // indirectly by some other process).
$ `1 i4 E5 ?/ [: S+ a2 E$ o 5 x8 H3 m" x( R* E/ F0 a
modelActions = new ActionGroupImpl (getZone ());
T1 E$ F& r. l/ g! i: v# v1 @1 a. k* K
try {8 q0 s% s6 {; c! c% Z
modelActions.createActionTo$message- |' R. P) g/ s4 p+ t t$ N* @7 N
(heat, new Selector (heat.getClass (), "stepRule", false));
+ L6 G; ?* j: B* s( Z2 Y } catch (Exception e) {3 v: H: x( ?& j/ y* v
System.err.println ("Exception stepRule: " + e.getMessage ());4 {; N6 e& ?0 l
} }2 \0 a( M. }+ I5 c
' b. x0 s$ ]7 U- C2 }, N try {* U A3 i! O5 w! u& k
Heatbug proto = (Heatbug) heatbugList.get (0);
# {0 K4 Z$ m% ~6 { Selector sel = 2 _3 Z# e' G! ~% n( n
new Selector (proto.getClass (), "heatbugStep", false);
3 u" f* j( c5 {4 W actionForEach =
, f5 C" v* {, p modelActions.createFActionForEachHomogeneous$call" l9 ]7 m0 V7 V+ ]! J. `. w
(heatbugList,0 o0 _' ^3 F; {1 R, ], V$ b
new FCallImpl (this, proto, sel,
& J0 m1 }. n( t new FArgumentsImpl (this, sel)));1 V& c/ ~" B* |
} catch (Exception e) {
4 Z. @. _- S, {2 f e.printStackTrace (System.err);
" |! F. m# |9 R; V3 e7 q( V }
& k" r$ Y: q9 Z. L0 c1 q3 h& M $ d5 D* Z5 H) m A4 M2 K
syncUpdateOrder ();7 N% Y# E) q$ j( Y8 ^6 j! ]
+ k; C' V8 Y0 B" r7 A
try {' g1 ~8 a) k) O% I
modelActions.createActionTo$message 5 n- Z( u4 A& x/ w. |! N
(heat, new Selector (heat.getClass (), "updateLattice", false));
; H9 {$ e7 j+ a# s# C } catch (Exception e) {+ v ]3 E7 d* z
System.err.println("Exception updateLattice: " + e.getMessage ());% R2 G7 P5 f7 K) a
}: x8 m9 V1 N; I1 b
& u0 B- i3 F$ B // Then we create a schedule that executes the
m1 X) e7 b0 q( a // modelActions. modelActions is an ActionGroup, by itself it6 H# H" a( g, T% v
// has no notion of time. In order to have it executed in M4 @5 r" Q$ I3 \: V6 V0 o! s
// time, we create a Schedule that says to use the. b3 ?8 }7 V Q
// modelActions ActionGroup at particular times. This
4 l( C0 \1 @' o4 _ // schedule has a repeat interval of 1, it will loop every
( `4 s" X' l4 y // time step. The action is executed at time 0 relative to
& ]6 p- R7 w! h5 D$ g% b" W6 }) c$ ? // the beginning of the loop.
+ U6 e$ f7 |% d5 J: I
- L8 a0 l* P9 o0 w7 H1 m6 \) f. G' S // This is a simple schedule, with only one action that is
* r6 t8 C3 z/ o& p# Y4 x/ i ^ // just repeated every time. See jmousetrap for more, Y; {* z1 W- q8 j2 h$ I
// complicated schedules.4 }7 O/ O& w2 I- P, V
9 L. v7 s" U- T. x9 p. o" O modelSchedule = new ScheduleImpl (getZone (), 1);
# Y* O1 U' n, H* T* | modelSchedule.at$createAction (0, modelActions);
7 b' G% _' r" Z% y4 y1 t
; G* {) r7 i% q8 T9 |6 X3 ]+ o return this;+ K3 N: h' d q0 Q* ^' W
} |