HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; x0 i+ ?, c2 p3 X' {4 Q4 M0 t3 U4 x' u7 r* a; O; T; x% j, H1 M
public Object buildActions () {: n# T H& ~( j5 T
super.buildActions();
# j6 Y) z9 S. G$ Y
8 ?8 p# C! R$ K- y. f2 W, u // Create the list of simulation actions. We put these in
2 l7 {$ P6 `. g" y5 j2 D% n // an action group, because we want these actions to be
, l# v, E/ i+ L6 u // executed in a specific order, but these steps should0 F4 O6 H: H/ C
// take no (simulated) time. The M(foo) means "The message! |, s3 Q/ Y' `9 ~& Z
// called <foo>". You can send a message To a particular* j+ W" q$ G& v5 v( `; c
// object, or ForEach object in a collection.
, v% g1 K1 @1 U$ W5 d 6 E( n. ^. f- K
// Note we update the heatspace in two phases: first run! J$ {% d$ c% V: Z, f5 Z+ r1 t/ E
// diffusion, then run "updateWorld" to actually enact the
# e9 N0 j# p: y; x // changes the heatbugs have made. The ordering here is# X! G1 v) H5 x; B1 W) s
// significant!" m% F- w7 W( h4 {9 D, Q! c
, H ^+ }" W+ T, G8 _. j // Note also, that with the additional" r# o5 n l% f' ~9 q
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 M) v4 I# c/ i0 i c+ ?" e
// randomize the order in which the bugs actually run" A' _! A+ u& ]# w0 @0 d7 I! w8 z
// their step rule. This has the effect of removing any
3 k& A8 b5 {, d7 c5 P // systematic bias in the iteration throught the heatbug2 Z D' l7 J* k* k+ o2 u7 G, r7 w/ e9 L
// list from timestep to timestep
+ M" H& K: c$ n; C( @ D4 O
" ~/ [4 t! P% N; o# B // By default, all `createActionForEach' modelActions have( F8 ^1 w9 j6 g
// a default order of `Sequential', which means that the
0 t2 `3 g9 P/ i4 f2 {' _( f% C // order of iteration through the `heatbugList' will be
$ h3 ^) q6 z8 g" R+ ^ // identical (assuming the list order is not changed' c; n( y% \4 j' F" {5 P7 r2 _
// indirectly by some other process).' J( e/ ~8 B9 q4 X2 P/ [' n+ ^$ t
: g$ Q8 R" {8 h" l/ _ modelActions = new ActionGroupImpl (getZone ());
J0 J8 E2 c. F& a/ V% H
2 Q# `& e# d& U try {
4 R: n# W2 b ]+ P) | modelActions.createActionTo$message
1 e; }. o1 U# Q+ |0 t0 } (heat, new Selector (heat.getClass (), "stepRule", false));$ u1 S* S5 I: f. y# q; v o
} catch (Exception e) {& d2 j3 B' ^; j' _
System.err.println ("Exception stepRule: " + e.getMessage ());
- D- _* X ~- N6 D+ u, Q8 S7 X }
& v: {/ r g( y' y3 [+ L! T/ i
1 k" N1 g/ S2 W3 Y try {' [& R& M& P6 [ }4 B0 Y: H
Heatbug proto = (Heatbug) heatbugList.get (0);) M7 ^1 M4 v7 A# {: e7 P: H# h! t
Selector sel =
: }' K9 G. w6 A$ | new Selector (proto.getClass (), "heatbugStep", false);6 H& ]9 Z4 q1 k' V ~
actionForEach =+ m/ u8 |, e! _8 _' W5 A
modelActions.createFActionForEachHomogeneous$call
( n( Q& {1 `& k, O0 i9 t" F (heatbugList,
: m% T: A( \+ Y& D( A' x new FCallImpl (this, proto, sel,6 I# s7 }' L) K G& r/ R& h0 m
new FArgumentsImpl (this, sel)));1 s7 E# ?$ G. j+ r& K
} catch (Exception e) { g9 N, y v: C" A8 x5 \* M) F
e.printStackTrace (System.err);
5 k3 R3 L' p) `8 i e5 ?4 F* p( I }
. ]$ g, V; H+ Y4 M2 c" v
' [# `; _$ b! Q syncUpdateOrder ();
1 t! J; P& r4 z5 ?# E' n! f8 I. u7 p- Z4 G% X% [
try {% A2 I7 I! j) t
modelActions.createActionTo$message 6 h! l; f2 J5 l# W* {
(heat, new Selector (heat.getClass (), "updateLattice", false));# b! t' o! S) D* q$ ]& k. n
} catch (Exception e) {1 N/ c( s( s t2 s) h) O3 Z
System.err.println("Exception updateLattice: " + e.getMessage ());
3 f2 S3 E$ w2 _' t* r* p }5 B# O4 C5 w0 E# p1 o, e2 ]: f( x
' x7 i0 n9 F2 Y' x6 v
// Then we create a schedule that executes the; w; b/ ?; `# {6 ^
// modelActions. modelActions is an ActionGroup, by itself it: \3 P$ @! B0 b. i1 N
// has no notion of time. In order to have it executed in8 s: Z7 ? g$ ]5 g
// time, we create a Schedule that says to use the
% U3 k4 i( u; V0 z' U. d$ I; v1 K. r // modelActions ActionGroup at particular times. This) x8 K. E' O! q& U4 ^6 G: k
// schedule has a repeat interval of 1, it will loop every) k: U+ u1 n' d E. j. j8 t
// time step. The action is executed at time 0 relative to2 }, T2 j6 w1 r" O
// the beginning of the loop.5 i3 ?8 R, s. j( ~9 F8 ^
& S# \: m0 \6 d4 L8 B; v) B7 q
// This is a simple schedule, with only one action that is
# z8 U) u8 w! p& V8 O: Q* _ // just repeated every time. See jmousetrap for more
, V7 E) W2 A. d; ~' @; ~8 u$ o // complicated schedules.
0 {' K# u8 _9 j 4 h0 I3 m& ?2 s% b: M+ B
modelSchedule = new ScheduleImpl (getZone (), 1);5 y0 {3 ~: t* H1 M7 }
modelSchedule.at$createAction (0, modelActions);
% P; x1 u' \9 I
2 m. G/ Q1 E# u( C5 x. ]7 s$ d- G( f* ` return this;
: h, ~% s! U* T8 @2 B } |