HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 ~& |5 c2 R, J# o0 z# C+ h$ F5 }) z1 `) K+ D, b9 X
public Object buildActions () {
! U1 F; l# a$ x super.buildActions();6 i& D# e8 f( N7 G
- W7 H: B# o5 s2 ~0 J2 H // Create the list of simulation actions. We put these in+ p5 }4 t! t9 Q0 e' ^: q( q, I
// an action group, because we want these actions to be
x f; p1 p, b8 `: W // executed in a specific order, but these steps should
5 s9 }; ^ @) Z, D) B" X // take no (simulated) time. The M(foo) means "The message' S" `% a6 T* p' ?" D
// called <foo>". You can send a message To a particular% Z; g0 S& v, A) g" M% ^
// object, or ForEach object in a collection.
: [9 `" V& P1 _& O( k+ a" t 4 s c- j4 R' C& H' b( S
// Note we update the heatspace in two phases: first run
) z# H% S3 ?9 [ C& @9 D // diffusion, then run "updateWorld" to actually enact the
5 _$ y ~+ A- l5 m! n \( ~8 z // changes the heatbugs have made. The ordering here is
3 l) I& Z H6 y8 v V // significant!
8 w3 \5 n' c. X2 O # J1 j( t3 c! x0 ]
// Note also, that with the additional
0 m a4 J; x' z* J // `randomizeHeatbugUpdateOrder' Boolean flag we can) W ~3 U0 [2 @
// randomize the order in which the bugs actually run
; z- I7 ^/ Z0 ~+ i9 `4 h8 L // their step rule. This has the effect of removing any
5 ^) b- W3 p% B // systematic bias in the iteration throught the heatbug
7 b% n* F7 g7 Y // list from timestep to timestep% _% U+ K" J, o9 m/ r5 \
! K# @: A8 o- U; e
// By default, all `createActionForEach' modelActions have6 g7 B( \1 {' m! k4 C
// a default order of `Sequential', which means that the8 A7 X0 I. m, C
// order of iteration through the `heatbugList' will be. p( S/ {- [ h: c& l! g) ~: u
// identical (assuming the list order is not changed
q6 x9 v# S. c* g6 T* {% C1 a // indirectly by some other process).3 r9 K% @8 m8 d5 _5 p& ]
' w& E- K \- z/ i
modelActions = new ActionGroupImpl (getZone ());# I" g- N" ~7 M; M* ]/ r* ?; B
3 C; R% M+ v r3 [4 p
try {3 J5 m& @- v5 G- @6 l) |
modelActions.createActionTo$message; j3 Q. f# L n- {0 u9 h$ y
(heat, new Selector (heat.getClass (), "stepRule", false));
$ i7 X/ d, O( D) C } catch (Exception e) {% M! @! e/ w' [' d* y+ i
System.err.println ("Exception stepRule: " + e.getMessage ());
- B% [4 L5 ] O! d }
$ z; ~0 n3 s$ H) z/ S+ |: _
4 o# F- {! ]- e$ b# u try {
. j1 ?8 P$ E, h7 r Heatbug proto = (Heatbug) heatbugList.get (0);, J9 d0 m( b$ X+ H
Selector sel =
% z D& F$ w- p+ m0 W new Selector (proto.getClass (), "heatbugStep", false);
' y& I9 ?: E: |+ D& i" Z2 ` actionForEach =3 w) o: E& i2 W1 I. c- K/ ^
modelActions.createFActionForEachHomogeneous$call
* N. a* X. B# b( i1 U: Q (heatbugList,' Z0 C l: Q; k9 L5 ]
new FCallImpl (this, proto, sel, u$ v: |* Z P/ k
new FArgumentsImpl (this, sel)));0 i6 M2 H7 |1 z* f6 c; d$ {
} catch (Exception e) {3 P1 v5 |( Y9 p0 G, e+ l
e.printStackTrace (System.err);
9 S2 V# c! i y& N G }' c, ?; A+ ^- @- o
. d9 s; U$ X F {/ r, ?0 P
syncUpdateOrder ();
/ D+ V" {+ z- T3 m) @, A4 e& F: T! P1 s8 G; Y t
try {6 v' k$ J+ Q% `
modelActions.createActionTo$message ' f; x% A* P3 \& O& q
(heat, new Selector (heat.getClass (), "updateLattice", false));
' o* ^3 n- @3 s+ L/ }% [ } catch (Exception e) {
8 w# g; R9 U7 N" D% [; H/ j+ ` System.err.println("Exception updateLattice: " + e.getMessage ());9 u g0 a& @8 v5 E
}
2 K0 Q+ `9 L; S1 O ' D# A. w& k5 s4 P! a9 Z% j; C* |
// Then we create a schedule that executes the, ]4 x, O2 k {- w% N
// modelActions. modelActions is an ActionGroup, by itself it
2 F3 D6 ]5 Y! h9 Q5 K // has no notion of time. In order to have it executed in' k+ p& d8 {3 G2 F. [8 f1 u8 v
// time, we create a Schedule that says to use the$ Q& L! G+ c1 o, z0 _8 d0 m
// modelActions ActionGroup at particular times. This
* O7 c: r, H% |) B: C, S // schedule has a repeat interval of 1, it will loop every
( y# e* v* M5 |& w // time step. The action is executed at time 0 relative to7 R; f' l) `0 w$ S( [
// the beginning of the loop.; w, r5 X. R) ^; U5 [- j0 i) l# O7 D7 ^
1 A- |9 K' k L6 p, `
// This is a simple schedule, with only one action that is1 s5 t- L, V8 z; V% Z, U, R* o* P# t
// just repeated every time. See jmousetrap for more
# g; Y; L4 L' \5 v( g" Z: Q // complicated schedules.
$ u0 W% C% U+ k) C, { & f- S% _) \# {: W
modelSchedule = new ScheduleImpl (getZone (), 1);
+ N7 c# b9 M2 n9 t7 W3 w- c& x9 g8 d modelSchedule.at$createAction (0, modelActions);
8 [* N; |7 {' E/ J' M& d( X# q
0 u/ C* E4 U0 c- S! K& ~0 O return this;0 U, n7 L+ g, t: O) ~% k
} |