HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 O p) A( x% e% E @& A
e1 x4 J+ E( k E( `. i public Object buildActions () {
" X: }2 ^, X; Q0 o2 l. z super.buildActions();
* T, ^/ ~! \$ Q+ h" T
7 L a/ U& E0 O; c6 d7 G& W // Create the list of simulation actions. We put these in
# ]4 Q$ f9 Z6 e* M' ? // an action group, because we want these actions to be
' Y) S( e- f# c0 z; y4 Y. _ // executed in a specific order, but these steps should9 ~& E" g9 e7 Y! j! I
// take no (simulated) time. The M(foo) means "The message
2 _0 H% A0 c6 L // called <foo>". You can send a message To a particular
; r- c6 X" Z' {1 j8 u7 x- I // object, or ForEach object in a collection.& x9 m B" H6 O8 c& D' g% }
4 q3 L( M, Y7 |* G // Note we update the heatspace in two phases: first run- a, A% s% U5 I- Y# C# c( j
// diffusion, then run "updateWorld" to actually enact the
5 e6 z, y! s' v" M ^ _0 I // changes the heatbugs have made. The ordering here is( ~9 d [5 X& L) O; k
// significant!
; l# [/ Y' F" u & t% f& I! ]4 b N
// Note also, that with the additional; G3 r! ?, x7 c. h
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 D0 o0 Y" [/ _/ H // randomize the order in which the bugs actually run
) N3 d2 n' r( g( ^9 W3 z- |1 d // their step rule. This has the effect of removing any& G6 L; U5 V$ Q @6 b
// systematic bias in the iteration throught the heatbug+ E; d, U' N& T
// list from timestep to timestep
9 w! A i; K2 b* x
' M" _ G8 t5 M3 W0 m. d // By default, all `createActionForEach' modelActions have
" b, Y% a4 P9 Q5 r0 P // a default order of `Sequential', which means that the
Q+ C' t0 B$ ~9 Q2 s0 \8 q6 Q4 T // order of iteration through the `heatbugList' will be
& T* \) k6 Y K // identical (assuming the list order is not changed1 @8 @& N, U" m" g+ z, c3 A. S3 K5 f# x
// indirectly by some other process).& S, C7 y0 L7 b: G9 `" H
) s! M* \1 M- z, E modelActions = new ActionGroupImpl (getZone ());
3 M( g k0 r: c2 F h7 R9 z$ s% c0 O j* a6 x$ O# x) e
try {% h0 A- K( u, Q. {6 u& C
modelActions.createActionTo$message
9 q0 w! x( F: N (heat, new Selector (heat.getClass (), "stepRule", false));: H1 @5 C- W6 B) D. X- i" A
} catch (Exception e) {
: q0 O* t; ^( v System.err.println ("Exception stepRule: " + e.getMessage ());
+ b9 ]( d" v& g }
: G* L+ a/ ~( C, x' E2 P2 M- h
% d; M! ]) | q8 M' u E2 N try {2 w. F" ` [0 Q# m$ T W) W
Heatbug proto = (Heatbug) heatbugList.get (0);
- {5 q7 _% [) d( B Selector sel = - P, q4 Q; z" }! E5 F2 ?
new Selector (proto.getClass (), "heatbugStep", false);+ l9 ~, p- b* J0 A$ O2 k
actionForEach =
) h* j' {/ \: o8 t! q modelActions.createFActionForEachHomogeneous$call) C) R5 s: V; M3 k8 [0 J/ ^
(heatbugList,
0 Q0 ]: w5 g3 I. Z1 y new FCallImpl (this, proto, sel,5 a' R) M& {& ^2 N* z
new FArgumentsImpl (this, sel)));/ y: ^( {5 F3 B& T# K
} catch (Exception e) {- [& H+ U4 U W* F( e6 Z5 d9 V
e.printStackTrace (System.err);* @. W% G) k, O+ W/ m3 j
}: R! K* u1 }6 L
* o0 j" ]6 w( c0 \5 t/ v8 x/ G. L
syncUpdateOrder ();
$ X' S: A$ Q5 m4 y/ F2 W6 t
4 p; u/ k3 j' b try {
4 {( T+ K s* q modelActions.createActionTo$message + G- l# ?: J9 g9 n" i. U
(heat, new Selector (heat.getClass (), "updateLattice", false));3 ^* Q$ z9 M% b! E7 x
} catch (Exception e) {* x5 f( f3 Y' k/ e) g) T
System.err.println("Exception updateLattice: " + e.getMessage ());
' T1 Y# ]2 ?7 ]7 M }
1 N% k+ y; o: h1 e, o5 \
+ e* q Z D0 }0 P: f I0 _5 M // Then we create a schedule that executes the
; `5 L+ X/ e2 i // modelActions. modelActions is an ActionGroup, by itself it
* r, K* Y4 A9 Q; K( h // has no notion of time. In order to have it executed in) {+ X) h4 Z; u$ @
// time, we create a Schedule that says to use the& U1 } Z) \" p
// modelActions ActionGroup at particular times. This. E# a& r: S- e+ O+ H1 ?
// schedule has a repeat interval of 1, it will loop every
; b: H! _$ F9 z8 y9 `. a% @% b9 _ // time step. The action is executed at time 0 relative to
7 o! N, U ^0 ?, x) e( p( W // the beginning of the loop.& N6 ]; v( P7 j: X9 m
}6 m, _9 a; y, m5 P
// This is a simple schedule, with only one action that is! H; g. X) P! c. v+ w: U
// just repeated every time. See jmousetrap for more
9 J7 S9 F$ e' I$ F" H // complicated schedules.
, [9 D/ e- y. x
2 E7 I7 W( F; ]) w& a modelSchedule = new ScheduleImpl (getZone (), 1);0 T* D8 q& }% ^( X$ o( s
modelSchedule.at$createAction (0, modelActions);
) f3 n1 u: Q% q1 l) q1 L" C+ K' q 6 @$ d" g. j3 j/ R. I
return this;
. Q: L5 ^) N' V* h. g } |