HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( Y' j' m4 K5 f/ ~ W" e8 I. h
# R# b6 x5 j6 |- L1 u( C public Object buildActions () {" {0 {! W. A5 e
super.buildActions();
! s% X) v' p8 b7 C+ W( i3 R4 Q - ?2 E: T9 \! d! Y" [: Z; [
// Create the list of simulation actions. We put these in
, p/ N5 H; E" l9 h+ v // an action group, because we want these actions to be4 o n' F: C0 z+ ]
// executed in a specific order, but these steps should2 W8 J( ^+ R0 @4 N+ C2 ]5 J
// take no (simulated) time. The M(foo) means "The message# U6 \4 `0 H$ P
// called <foo>". You can send a message To a particular7 k. h) V: I7 H: _3 ~% U& f, S+ r
// object, or ForEach object in a collection.
4 g. V" n3 \$ E) D) [& l; W / e) h4 a3 Z3 x/ g6 b
// Note we update the heatspace in two phases: first run$ l4 A+ ?; R. m
// diffusion, then run "updateWorld" to actually enact the7 |& y* g5 v+ o9 q
// changes the heatbugs have made. The ordering here is
1 e( C2 ]# i# B* x* f // significant!
4 y' w, }8 K7 y0 A
/ N1 D- G, L- j* [ // Note also, that with the additional. J0 S' _, u1 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can& B& a" _5 L1 [3 u% G
// randomize the order in which the bugs actually run# }3 M2 e9 W$ S" _% s- S8 k# g
// their step rule. This has the effect of removing any
: w: M# w, a3 ~, p# [ F // systematic bias in the iteration throught the heatbug3 S8 M6 K/ ~- h9 J( U, O- c
// list from timestep to timestep
( r% U/ ?& r# d6 [8 ]- T
" c- w4 ]" M# E4 G6 B* z# _ // By default, all `createActionForEach' modelActions have
$ P+ V" m. b$ z- V // a default order of `Sequential', which means that the! p3 k- i' R' h/ P$ p- _$ [
// order of iteration through the `heatbugList' will be
3 c4 I4 |% `% k% M // identical (assuming the list order is not changed3 [! ?( J6 z. u2 w
// indirectly by some other process).4 a' H$ o2 B. p1 S f% n7 Z/ j4 h
( Y9 s& U3 ]: d
modelActions = new ActionGroupImpl (getZone ());
8 J+ K, x" @+ p/ g4 b6 c
2 v* L" V( L7 S5 b try {+ d$ D9 R# S1 d( ^% R7 y+ X
modelActions.createActionTo$message
" o: z8 m6 Y- K) g2 N& k. r0 l0 R+ [ (heat, new Selector (heat.getClass (), "stepRule", false));$ V" w- X1 A; U, _
} catch (Exception e) {
( K' z) N3 N+ Z/ }* l; y System.err.println ("Exception stepRule: " + e.getMessage ());! a( A I/ W) F) @5 z$ p
}8 B: t, `5 B/ W% w/ E' V" h
$ g& _4 t& N4 w/ `2 n
try {
. ^1 a! M$ g0 o2 m3 G* M3 C Heatbug proto = (Heatbug) heatbugList.get (0);* E% ]6 h# P2 R3 O9 l4 k- ^
Selector sel =
9 ~# d$ ]' Q! N6 {9 v& E) B9 N new Selector (proto.getClass (), "heatbugStep", false);/ a+ {. a7 f: f/ S0 p+ o7 ]# a
actionForEach =
4 I) f. X0 W1 l) g8 G, f modelActions.createFActionForEachHomogeneous$call
3 \& z2 B+ ]7 s7 R0 u (heatbugList,
6 W1 D6 V& x1 _( E- H new FCallImpl (this, proto, sel,5 }( z: l% n! ?: b, C' w
new FArgumentsImpl (this, sel)));( j. W/ K9 Q, l E0 `
} catch (Exception e) {: L+ {6 O5 F- y: c k8 P) \' O% {
e.printStackTrace (System.err);; I: @- s, m9 @+ N1 M2 T/ E
}
; ?4 ~1 v; I! ?" j, H4 h
' Z$ w3 f0 O) E6 I9 P) Q) z syncUpdateOrder ();1 [: r7 d4 q1 a, N$ Z2 B$ x/ P# U
1 I/ h; L- ]- F9 G4 w
try {% f2 v, @+ N0 u7 l. n% C/ |
modelActions.createActionTo$message % X8 f; h; i* m# j$ v" S/ a# C
(heat, new Selector (heat.getClass (), "updateLattice", false));( r2 F v/ `( v2 U8 e7 n! I
} catch (Exception e) {
, N: P) I, n% ]: d+ Y9 |* m2 ? System.err.println("Exception updateLattice: " + e.getMessage ());
( d- D6 ?( |' Q4 M9 S3 m' f }8 b p+ I( X: b# K3 x
' w0 s% s2 i9 A // Then we create a schedule that executes the9 q+ N% l5 B1 [- K
// modelActions. modelActions is an ActionGroup, by itself it9 Z7 `0 }3 ]: p" U
// has no notion of time. In order to have it executed in c! C. S+ B! U
// time, we create a Schedule that says to use the
7 k. h: {$ ~- c, v; x- r // modelActions ActionGroup at particular times. This
W3 P- P! W& l% g% i+ l) G // schedule has a repeat interval of 1, it will loop every! Y( H) s% ?/ r
// time step. The action is executed at time 0 relative to
. d: k! n& j" ?+ t+ D n // the beginning of the loop.
' f7 ?# D! l) g% d% `( e3 ]
) W! n9 J; C6 @% d // This is a simple schedule, with only one action that is
# f5 O( r& c" r _ // just repeated every time. See jmousetrap for more
5 E! q3 p& O8 q. Q" r R // complicated schedules.
% o* u) ]% N x* P- d0 z5 b 6 h1 C& o) Y! }/ B% _9 n- x
modelSchedule = new ScheduleImpl (getZone (), 1);, N- Z0 A4 c/ H9 r2 V1 T
modelSchedule.at$createAction (0, modelActions);0 o2 P& B/ g3 e1 ^. @5 u! U1 _
1 P* t: r/ X" L, n7 \* j
return this;1 k* k1 d |' C: O6 a
} |