HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 t: \" c- v9 o( C5 S
6 t% e* _, M8 ?; W4 e6 U! ~ public Object buildActions () {
$ b7 y8 h3 |3 C super.buildActions();' \0 k$ r6 _; L2 C- Z2 C
) A5 w& G" {+ { // Create the list of simulation actions. We put these in
; `7 |4 K; n/ k, f4 p( q7 F // an action group, because we want these actions to be
- P, O. @. f0 ~3 `4 E // executed in a specific order, but these steps should3 f; T2 N0 P5 ]
// take no (simulated) time. The M(foo) means "The message
# B* J2 e. D3 u- A% Q& t0 j // called <foo>". You can send a message To a particular- ~5 w7 H* N9 R7 ~; i
// object, or ForEach object in a collection.
5 |2 f3 i* q' ~: }8 N
6 l \, ^. E* y1 n# n1 e# i // Note we update the heatspace in two phases: first run- F! x' ~7 s0 b) X% ? {8 S7 M5 ]5 e
// diffusion, then run "updateWorld" to actually enact the6 ^7 w0 A: f8 J+ Y& k( [
// changes the heatbugs have made. The ordering here is
- E* [; A" E S/ ? // significant!+ u. h7 C9 a! O6 ?0 W6 f
2 i6 ^- m) t2 U' ^( @: c
// Note also, that with the additional
/ b6 ]8 K/ J* u! F9 \, @ h // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ ]& _( Y7 }: B* `* \ // randomize the order in which the bugs actually run
v! E$ a2 F4 r& v // their step rule. This has the effect of removing any1 U( ~ g1 O4 ?* a9 L7 A
// systematic bias in the iteration throught the heatbug
8 R l3 _6 ~5 ^; k/ ?; q$ E // list from timestep to timestep+ f- v, k9 g3 U, d4 i3 X" `
# e4 F; ] ?+ o+ L+ `* E& U
// By default, all `createActionForEach' modelActions have
7 A* G9 q v3 T" k6 r3 U% H // a default order of `Sequential', which means that the, z! D" f, A3 R- e: J Z: Y
// order of iteration through the `heatbugList' will be
4 P( H) K+ N' d/ f' @ // identical (assuming the list order is not changed4 k9 `1 `) E* O# e/ S
// indirectly by some other process).$ F0 I: R) I$ b$ J0 R' L
" r6 N3 v! D. w' b: N/ A modelActions = new ActionGroupImpl (getZone ());
# ]; V) P5 w0 e7 }% _6 ~* {. r0 Z# ]7 R! o- Z
try {
: c& X D. H, j, z modelActions.createActionTo$message
" C) H1 T8 f5 u3 U) D (heat, new Selector (heat.getClass (), "stepRule", false));
( ]3 |- F- E( c8 C8 ^ } catch (Exception e) {
/ z' z" b' v4 E6 u/ H" a System.err.println ("Exception stepRule: " + e.getMessage ());) M! ^, \& X4 t1 b4 a8 \2 \2 r% K
}( D0 M8 H/ q7 w2 t. _
! |$ ]$ ?( D9 A0 E- ^; d try {
* ?8 L p9 y h1 R3 ~9 G" t Heatbug proto = (Heatbug) heatbugList.get (0);
, S& `8 F2 t" e' U Selector sel =
0 m+ o/ Y4 d8 Z5 x1 l new Selector (proto.getClass (), "heatbugStep", false);
% q$ Z5 R, d0 d+ P actionForEach =! U) d3 X/ t- ], |5 d
modelActions.createFActionForEachHomogeneous$call, N! l' k5 _6 e- P
(heatbugList,$ a0 w, R0 J+ J. z8 Z& [( z" U
new FCallImpl (this, proto, sel,5 F N+ c. ~: `7 P6 I
new FArgumentsImpl (this, sel)));3 U! [7 G- b& F+ b( X
} catch (Exception e) {) T) g% J1 v; K4 L9 m6 d2 t8 J
e.printStackTrace (System.err);
2 y0 a. K( i" j% h, \+ ?; y6 a/ ` } d- U$ l' |& y, s8 G% O! u T
# v) G- B2 o. o0 ~6 g7 Q
syncUpdateOrder ();
+ t: J% }. ~) S7 t$ L' ]8 i$ {5 L7 Z2 b p* K4 ^/ D
try {. A$ S9 A$ a5 W5 F h9 Q( T5 ]
modelActions.createActionTo$message
# T2 ]' [6 _8 ]3 a (heat, new Selector (heat.getClass (), "updateLattice", false));
8 T0 O# d L# v: Q) [+ q8 n } catch (Exception e) {
4 l7 @& ~! N$ D$ a' M System.err.println("Exception updateLattice: " + e.getMessage ());3 x/ l$ l! h2 ~+ B
}2 `5 b' E, I& S- l( d; k/ Q/ O
- L3 D0 ?! H: I0 D u // Then we create a schedule that executes the
' i/ Z* o2 }9 m3 E // modelActions. modelActions is an ActionGroup, by itself it
; Z) E1 [3 M& u5 c // has no notion of time. In order to have it executed in
2 L/ j- o1 h; @ // time, we create a Schedule that says to use the
# W5 O! b9 I% K% m( Z* G5 i1 N // modelActions ActionGroup at particular times. This
" @4 J8 v N7 j- ~( ~: W) [( H // schedule has a repeat interval of 1, it will loop every
7 z, V$ g2 S. ~0 c7 _, { // time step. The action is executed at time 0 relative to/ w2 R2 k h3 z U
// the beginning of the loop.- F& ?# K, S3 u$ T
% ?$ R1 v) m# X7 T( T5 g4 K9 a' x
// This is a simple schedule, with only one action that is8 d. @6 b; [, N! b* R
// just repeated every time. See jmousetrap for more
8 \+ B9 v) P+ O5 r' n* G7 O' D // complicated schedules.
/ ?4 p, h+ x' n' K5 X) v$ y. i 8 r+ S; H9 H9 g
modelSchedule = new ScheduleImpl (getZone (), 1);
3 V* x6 m! P$ k1 c: e3 p modelSchedule.at$createAction (0, modelActions);( ~! }0 D! S$ ?; A" @' Z
. \( P3 ]$ v$ {# E3 Z. ~, B
return this;& x3 f, S0 [! G# _& N; e
} |