HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; a- c4 D) k; O8 A+ F' _
: q# ?( M. b0 j% n public Object buildActions () {4 I ?" N0 v& e1 ?
super.buildActions();+ N; u- F; |0 ~/ X
) q- N: E2 e. K' i$ |) o! l
// Create the list of simulation actions. We put these in+ I0 `$ ?# n; Y) |( X8 s$ a) w
// an action group, because we want these actions to be/ v" M+ e8 d6 g6 a7 F
// executed in a specific order, but these steps should9 i' B* t3 d A
// take no (simulated) time. The M(foo) means "The message
# Z& l' p* v9 c: q // called <foo>". You can send a message To a particular
r; [6 k i) r // object, or ForEach object in a collection.5 n/ x4 j" c" n5 m
- M! V$ O6 t6 Q8 z
// Note we update the heatspace in two phases: first run5 x0 }' b7 D7 Y1 ]. S. p
// diffusion, then run "updateWorld" to actually enact the( n" ]; N* Z D& l }3 T2 G: ?. B
// changes the heatbugs have made. The ordering here is0 \! d4 ~8 m, I1 o- z
// significant!
- v( s3 u: Z' t& t . M$ Q6 Z1 } d/ d
// Note also, that with the additional5 U& C1 L$ j% f7 z) M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% p1 X! s/ J) A, _% ` // randomize the order in which the bugs actually run
8 [: f$ x4 P ~: f+ z! A // their step rule. This has the effect of removing any' x% j R5 U. E! k% C" i$ G
// systematic bias in the iteration throught the heatbug( [+ s K w/ w
// list from timestep to timestep E$ t# |; d! z/ O
. p9 j0 a$ m J8 @* y1 a
// By default, all `createActionForEach' modelActions have
5 R1 g6 w" k0 W0 v9 d // a default order of `Sequential', which means that the5 U4 J; w8 ~) G! q
// order of iteration through the `heatbugList' will be# S) y* ^3 F5 g5 M& h
// identical (assuming the list order is not changed- M1 g! s, U, P
// indirectly by some other process).7 [* r& ?) V+ Y6 U5 }+ V# U5 S
! T5 g/ _/ z$ }) O
modelActions = new ActionGroupImpl (getZone ());" v) f% W0 O1 e7 o7 g
3 q, }* D" w' Z try {
" A& Y; w- s6 {- w modelActions.createActionTo$message
3 N( i( I8 |# o* H) z) Y (heat, new Selector (heat.getClass (), "stepRule", false));
! Y- M6 \6 s4 N0 t4 G0 u } catch (Exception e) {
+ J u5 p4 m: H# w" v4 x8 @ System.err.println ("Exception stepRule: " + e.getMessage ());
/ M! ?( y0 _% ? }
) _, L1 F; @8 d1 v1 s, o* D+ {2 {' h! B- s+ |
try {
) b! i* P9 N% x0 Q8 w8 e8 E Heatbug proto = (Heatbug) heatbugList.get (0);
2 @: t/ v2 }' P# m7 P9 H7 Q2 ]5 G Selector sel =
( }0 ?3 U" W" {! }) a% e6 J new Selector (proto.getClass (), "heatbugStep", false);
; l1 A, [! \8 C/ } actionForEach =/ J( @4 }, `2 l6 s) V
modelActions.createFActionForEachHomogeneous$call
% O1 s. l* W, d# T( ]" j f3 v (heatbugList,
X3 T- ^" z w+ p3 m new FCallImpl (this, proto, sel,
$ n$ u/ k# b- G new FArgumentsImpl (this, sel)));) | e9 L0 g% f5 l3 w( K: M
} catch (Exception e) {3 ^: w' f; A/ y, f: `: Z
e.printStackTrace (System.err);4 E+ H' t8 Y7 |
}% y8 _8 u3 R; t% ^ k3 w
b- z3 `4 O, b$ |! o
syncUpdateOrder ();* i6 _8 u/ {5 u- r+ X l8 D L
* {' p0 c! d& n, h try {8 B, F' |$ o' e1 T
modelActions.createActionTo$message 9 }9 m. N- q; |% h" W
(heat, new Selector (heat.getClass (), "updateLattice", false));$ J- \/ I. {; S' Q; M
} catch (Exception e) {
' Q" b* e* e& a6 D; w7 E) J# B, Q System.err.println("Exception updateLattice: " + e.getMessage ());7 L0 x! z; [6 U- `; F2 H) h8 {8 X( J
}0 p7 l' `+ j; c
6 c# ~. d7 ?5 @% V+ N' f' B9 @4 r1 L // Then we create a schedule that executes the
X7 p$ n6 B3 _ // modelActions. modelActions is an ActionGroup, by itself it3 W& }9 ^" [, K$ c( Y5 r* V
// has no notion of time. In order to have it executed in
. Y% d# E9 M9 ~9 E1 l% f // time, we create a Schedule that says to use the( v' V: ]+ ]/ a4 B; c5 c
// modelActions ActionGroup at particular times. This, o M6 @1 h- H% [* Y) a j7 V
// schedule has a repeat interval of 1, it will loop every
) c3 V/ S4 P7 T! e. K // time step. The action is executed at time 0 relative to; o- f& G; X2 _' n5 h' R* ~
// the beginning of the loop.. |0 Y0 j U: F
1 h" k1 y* p3 }& [
// This is a simple schedule, with only one action that is. r9 g B& U3 E$ D0 R1 }* r
// just repeated every time. See jmousetrap for more
3 v8 F$ F% w" ]8 ?$ [$ \ // complicated schedules.
6 L0 ]% w& ]% G) M3 f8 o) y. N
1 R* Q3 ^. _, o2 [8 V1 z l4 w modelSchedule = new ScheduleImpl (getZone (), 1);
: X" _+ { q$ f" H& D% ?5 N) s modelSchedule.at$createAction (0, modelActions);9 [" p6 F+ T) s7 a y7 ^/ Q
1 n# ~3 I, }* k# }# \( a
return this;+ V& v* R& t0 a3 o
} |