HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: l0 t/ ~! a2 \: S, i! B
- N4 E$ j; d" h9 d) S5 V7 R6 l
public Object buildActions () {: z9 |$ A( D2 U; K1 ]2 H b
super.buildActions();/ U# @; E6 t( Y- P3 H! U* X: ]9 N- S
) k' W! K* i2 y
// Create the list of simulation actions. We put these in
8 Z9 J* M% l% | l // an action group, because we want these actions to be
' d9 N! Q, O& \4 n% h // executed in a specific order, but these steps should
g% T. [) e0 w9 G // take no (simulated) time. The M(foo) means "The message
9 k$ {6 G# Z4 C I- n" D // called <foo>". You can send a message To a particular
8 z5 x* u8 j+ n // object, or ForEach object in a collection. I7 e1 n* S7 p6 i" v
" o, [* H* h! G/ u, m% T$ n
// Note we update the heatspace in two phases: first run0 C8 a6 P0 n" @" X$ N$ r
// diffusion, then run "updateWorld" to actually enact the
( r% b4 E( T% I // changes the heatbugs have made. The ordering here is
W2 U) n0 m# W6 T6 C) U; J3 R. X // significant!+ p; a& |3 G6 e4 ]# F t: a8 D" N
7 ~+ a# N& R8 y
// Note also, that with the additional: _8 c; t4 B+ T m+ |' B; i
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 M% Q8 S* N% b
// randomize the order in which the bugs actually run1 D, A1 ^0 f& V* O1 Z
// their step rule. This has the effect of removing any
7 B* V, B5 N' Z1 P // systematic bias in the iteration throught the heatbug; L+ A# E( Y! E* N* J
// list from timestep to timestep+ f; W4 ~; s: P: o5 v) p* P
' @3 c' h$ i" r* o3 z
// By default, all `createActionForEach' modelActions have
- A% l& U$ j; T1 l // a default order of `Sequential', which means that the) I7 Q+ F/ k; E9 T& @- ?
// order of iteration through the `heatbugList' will be
2 C: Y. x- I3 [) s // identical (assuming the list order is not changed( \- g ?% \$ a4 N( ~
// indirectly by some other process).* |3 o8 W% k+ Z, B1 b& I, O
- B+ Z i8 Y# M/ w, R( c# R modelActions = new ActionGroupImpl (getZone ());- t' s& Z' t) z# U, T7 k
3 h: G$ H5 G9 k8 |) @7 o6 [0 \ try {
* D P7 l& [3 n4 c0 P! N modelActions.createActionTo$message* U1 O1 t$ n& B: @$ \
(heat, new Selector (heat.getClass (), "stepRule", false));& W+ r# } G1 T- S8 ~
} catch (Exception e) {' @9 k% |/ Z8 [! {
System.err.println ("Exception stepRule: " + e.getMessage ());
8 `1 j, w% _( B) S }
( u# M& B6 i' H. ?, r7 \' i1 F7 S$ u" Y& L
try {7 q# b3 O9 v9 |( U3 |
Heatbug proto = (Heatbug) heatbugList.get (0);
; o5 \6 x! n# N. Y Selector sel = % @6 L$ u. w7 a5 | X( X/ A2 Z
new Selector (proto.getClass (), "heatbugStep", false);
& R2 A/ L% [' \9 H { actionForEach =
9 g/ u( [! J0 _6 Q modelActions.createFActionForEachHomogeneous$call
, [1 Y( g( u) v, m# S% c9 k9 w (heatbugList,% z$ D2 K6 a* Y; }( T4 l5 B
new FCallImpl (this, proto, sel,, x* P _- E7 E' H$ E8 ~
new FArgumentsImpl (this, sel)));8 J# E# I4 {$ X8 e- L
} catch (Exception e) {+ S3 r. |" i$ M, F2 T
e.printStackTrace (System.err);( W* L, P* ] @' w1 J, X+ J( A7 `
}
3 j( t% z1 {" C3 e6 u2 U
3 X+ s) J3 f" @6 M syncUpdateOrder ();: o: k1 ^ j( ^ B8 x* Z7 N
3 W- ^0 v' E( G/ R try {
/ F6 a( [" p9 g% m modelActions.createActionTo$message $ U/ I# Q. j" r& n7 w, i) i* R
(heat, new Selector (heat.getClass (), "updateLattice", false));
; K8 E# x1 l0 Z } catch (Exception e) {
W6 \7 f, G ^; s8 E System.err.println("Exception updateLattice: " + e.getMessage ());
5 m1 K6 F |3 p2 S3 d! m }% c' S% T* X2 Q- D$ F# K
3 j. _6 f4 n/ l8 F$ n) g // Then we create a schedule that executes the J; n5 y6 ]( T Y
// modelActions. modelActions is an ActionGroup, by itself it
# Q8 L! @' n8 }# E // has no notion of time. In order to have it executed in
6 ?/ A- a2 ^! a9 z2 B8 t // time, we create a Schedule that says to use the+ d% Z1 Q3 R$ L5 o
// modelActions ActionGroup at particular times. This
8 I$ _( F4 c- d // schedule has a repeat interval of 1, it will loop every1 X+ b+ L- G8 w r F
// time step. The action is executed at time 0 relative to
8 |& ~5 p' @7 f' p // the beginning of the loop.
" G" J0 X/ n( X" b7 v9 L- o5 D1 L0 k5 j( ^* [0 S7 [0 H2 G! B
// This is a simple schedule, with only one action that is% [& j2 }- q- r* Z! k
// just repeated every time. See jmousetrap for more
6 Z7 z8 \8 h! N% \. \ I( A. S // complicated schedules.0 u: d; }$ I; @6 ~) m; ~
7 u9 ^0 y5 l9 z7 @, }# e1 w% C8 o2 f
modelSchedule = new ScheduleImpl (getZone (), 1);$ } l2 B4 R d# I9 E0 W
modelSchedule.at$createAction (0, modelActions);2 _, U. h7 `9 Q: R
8 Y+ c/ X+ @. ~
return this;' r9 {3 K1 I$ C9 D% Q# N: J
} |