HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 b% ] h& c+ m1 ~9 ]
1 Y9 W# A3 w9 U0 \ public Object buildActions () {( `! P$ G; a( p) J, v
super.buildActions();* P9 y, F* A1 T
# ~9 e1 [( Q, N( `1 R
// Create the list of simulation actions. We put these in
& U) L" E+ M! x. O: J9 T% ~ // an action group, because we want these actions to be
F. G, v" B+ _5 f0 y4 \% Z2 E& o x! h // executed in a specific order, but these steps should
5 e+ R. t3 A2 Y, e7 Q5 ` // take no (simulated) time. The M(foo) means "The message
* u# A* C' ^/ r6 p. Z: w# x$ f+ C/ L // called <foo>". You can send a message To a particular
2 T0 b: V6 o4 Z) y9 Y- U# B( o // object, or ForEach object in a collection.6 b& F! f& b6 E" z% ?3 q
3 Q2 S Z d- }" s$ L0 u+ [6 ~4 `
// Note we update the heatspace in two phases: first run
( F) w* w6 f3 Y- z* j& g1 `5 T/ d // diffusion, then run "updateWorld" to actually enact the
. T" J$ w7 i- e* t9 q) O // changes the heatbugs have made. The ordering here is
( I" q3 Z* s, p" i // significant!
4 O9 h7 A+ _- g. ^3 K5 }3 M7 j# A
" Z; L) M- O- O8 {0 d+ N* T" @) r // Note also, that with the additional
n1 N) B& E3 w) H- E5 q, X8 x // `randomizeHeatbugUpdateOrder' Boolean flag we can9 {" s {4 G7 S8 A. e- g
// randomize the order in which the bugs actually run
/ u' {# \% } P! G0 ` // their step rule. This has the effect of removing any
. R2 F: H6 H& ]7 f // systematic bias in the iteration throught the heatbug
/ j, y c! g8 e // list from timestep to timestep( K' d- Y$ z5 G4 q0 k& f
+ ~ R0 g7 L9 B( h% o // By default, all `createActionForEach' modelActions have( z3 {* Z7 e# U8 n [+ \
// a default order of `Sequential', which means that the! g1 I( ], [1 O6 x
// order of iteration through the `heatbugList' will be
8 ~8 i* Q0 j( T5 P' _4 H // identical (assuming the list order is not changed7 K6 e1 e; v& f4 C' ?
// indirectly by some other process).9 C q+ h9 Q* {3 y% ]) t
. t3 H: C2 V6 j- J% z" w" j
modelActions = new ActionGroupImpl (getZone ());
! g0 x y2 v! c) G# f' a' f* C8 Y/ b8 X6 G+ Z
try {
# S, ]$ n7 i) O5 r modelActions.createActionTo$message" v% N+ Z4 M1 J0 L" l4 p
(heat, new Selector (heat.getClass (), "stepRule", false));1 j+ {+ s7 d6 ]' u q' D9 ]
} catch (Exception e) {
! m( h p! m7 G3 [5 M System.err.println ("Exception stepRule: " + e.getMessage ());! r2 _) s& A1 T: Q! b1 X2 g
}6 k. v9 N% a$ f% K6 |) W# \' J% T
3 F- r8 e3 A, T7 i) o+ m try {
* ^6 [# j' n" @: v6 r Heatbug proto = (Heatbug) heatbugList.get (0);4 N- Y. u: z2 ?
Selector sel =
; F6 Q6 ?( U7 w# ?0 a* N new Selector (proto.getClass (), "heatbugStep", false);5 h6 D) L2 `! q/ l/ V6 R
actionForEach =
) @8 X/ @1 {9 R1 |& p modelActions.createFActionForEachHomogeneous$call" @* C4 y5 e+ ^8 c! E0 C9 i3 R( ^
(heatbugList,
# I# ]7 E; G- [7 g( I4 \% q2 Q new FCallImpl (this, proto, sel,
8 Y' v7 g) w1 f. G2 T new FArgumentsImpl (this, sel)));
, H- m- u- Y1 h L& `/ o } catch (Exception e) {0 U; ^" Y( W, M9 S) Y. x& B
e.printStackTrace (System.err); n! d/ ?* @% |3 f6 g* p* f2 d! E+ L
}
( K- C, n7 e4 \/ g, d5 |* y 6 l9 z5 O/ R5 l
syncUpdateOrder ();8 j2 X5 _5 x2 k
; G/ U3 w, A* ^1 H try {
9 M+ F, \8 D" X& s modelActions.createActionTo$message
) x2 c7 ?. z9 B1 v5 b! b) ]% S0 \$ ` (heat, new Selector (heat.getClass (), "updateLattice", false));/ a6 l0 V7 L' C, h1 A
} catch (Exception e) {6 M- y/ Q: h3 T7 _9 ?! s# O$ p
System.err.println("Exception updateLattice: " + e.getMessage ());
6 e3 }, N# U. h- A6 A& k$ G }
+ T% a7 X* y2 G. N/ g+ X % f z! R, e0 ]- A' w1 M
// Then we create a schedule that executes the
* w* b, f' s6 R) l // modelActions. modelActions is an ActionGroup, by itself it( D, a& o& Z+ I2 n/ b( v
// has no notion of time. In order to have it executed in8 T; Q) q2 q7 W- t" U) f
// time, we create a Schedule that says to use the
R* d6 I# D7 U // modelActions ActionGroup at particular times. This5 N) I8 ^/ p- T4 k6 K5 O
// schedule has a repeat interval of 1, it will loop every; Z% `" l: Y; }5 T; ]
// time step. The action is executed at time 0 relative to
. X9 v% e" T" F9 N& O* w // the beginning of the loop.
, a- d0 \" }% j, u9 Z; Z) `
' u# O t- I& V& E/ d" L // This is a simple schedule, with only one action that is. W4 _! s, C9 B( B. G& k- E# K! l
// just repeated every time. See jmousetrap for more' ], |0 r$ o2 s! j9 |* ~
// complicated schedules.& x6 d! M. L% i% Q! i
9 y" O: B5 l% e: L modelSchedule = new ScheduleImpl (getZone (), 1);: a' S' v3 N, h$ e: U
modelSchedule.at$createAction (0, modelActions);3 ]$ O5 p/ j& D9 M9 S
% J6 E5 ^& c6 q' b1 Q, L+ A. s
return this;" X* ?5 `& L. U
} |