HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. Z5 i1 ]( Z3 ~* g4 O! x, _
$ I4 n1 v2 J$ i2 D$ P' C% l
public Object buildActions () {% o% U- s" ~# T; {
super.buildActions();
3 r2 T- g6 F' i# i ( b, P# [& b; m7 y2 ^; T) e
// Create the list of simulation actions. We put these in: X, C5 S8 w6 B& g
// an action group, because we want these actions to be
/ D; b1 s% E% ]% d+ N // executed in a specific order, but these steps should- o5 s8 X: K/ D! D5 `3 y
// take no (simulated) time. The M(foo) means "The message
9 ^3 I8 |& n2 t3 t! I" q F // called <foo>". You can send a message To a particular
: Q& \: ~3 W3 @ // object, or ForEach object in a collection.
( t0 d( b; f, t5 s3 B) o
& g- \3 f C @' s- h // Note we update the heatspace in two phases: first run
& V0 g% ~1 [' u" d // diffusion, then run "updateWorld" to actually enact the0 j0 x7 _/ |; L) ?0 S
// changes the heatbugs have made. The ordering here is# I9 g3 K$ G" a3 N) M
// significant!
# l9 E0 @2 m1 e: L# m0 h l# z) S, h( M+ v6 o' o
// Note also, that with the additional3 L: |: i7 }/ _6 j$ B
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) t) @4 H Z* c# `5 n$ w6 S, g& T // randomize the order in which the bugs actually run% J1 i, z! l* j4 U! x. s
// their step rule. This has the effect of removing any. X h# P9 C& |" P
// systematic bias in the iteration throught the heatbug* F! X; F5 d0 g2 W4 \8 k# `
// list from timestep to timestep0 l1 F- d4 g! O' O
8 z! z- \0 D. k8 U l& a5 n6 B5 x0 Y // By default, all `createActionForEach' modelActions have6 T' N+ i' g( H, y! B' z" q
// a default order of `Sequential', which means that the
% v4 l6 L% l' D. E: m1 ~9 f Y // order of iteration through the `heatbugList' will be
* i4 T7 k- X. M& D1 z8 J9 Y( \ // identical (assuming the list order is not changed" n( h, @* K! v& G x
// indirectly by some other process).
, w# |; u6 u3 F# o0 J' A
( I6 B' n. [- w: O" {# h, C modelActions = new ActionGroupImpl (getZone ());
& i7 Q; X' g# _- F/ m. v# f" r, ~' m1 R# L* ?
try {) }) o9 p, e. V5 k+ ~: g
modelActions.createActionTo$message
% T, [" t$ g- {! d- R/ G (heat, new Selector (heat.getClass (), "stepRule", false)); m6 X6 [' B$ i5 C( K5 Z m; ?
} catch (Exception e) {
% m% T' R& j' |& A" _' j( R System.err.println ("Exception stepRule: " + e.getMessage ());* n3 J$ n( p2 c
}
( K; _ @/ o x+ c4 G# y! i6 L1 E9 T9 E Z$ M1 A1 c
try {
- W1 i2 b5 `- G Heatbug proto = (Heatbug) heatbugList.get (0);
6 e1 S) ^5 C0 U0 F Selector sel = 0 B" D# E% d7 R7 S; `% `! f
new Selector (proto.getClass (), "heatbugStep", false);
* ^5 `7 T; O0 {1 k: }5 w" p actionForEach =5 V: ~7 `, {' _; [3 g6 W( e, H
modelActions.createFActionForEachHomogeneous$call
7 D2 ^. u7 a9 T! B; f (heatbugList,) q# _. n% C. L
new FCallImpl (this, proto, sel,& r1 q7 v# T2 A( J* X! z! P
new FArgumentsImpl (this, sel)));
' w- k" g8 W$ w, G } catch (Exception e) {8 b- v3 ?$ X3 I
e.printStackTrace (System.err);
( k' x, ?) h% b! B4 \ }4 C; r6 x# D& l1 ^
6 }6 g" X* ]; C+ K8 E syncUpdateOrder ();9 {5 y6 b8 ^ h- h6 a/ q% {6 f# a
# N, A3 m- V9 X: L: q
try {
4 a K5 r3 J* Q modelActions.createActionTo$message 6 d4 ^, U" z. \7 Q _
(heat, new Selector (heat.getClass (), "updateLattice", false));
# F& L/ P" `, ^6 F } catch (Exception e) {
8 H/ J$ u4 c2 A* ^( j( {0 `1 J System.err.println("Exception updateLattice: " + e.getMessage ());. h2 r/ A, I9 k; q' p/ I
}' }) [8 H7 n( D& ~$ W
# g8 w. k5 U& L/ w. s# X, \
// Then we create a schedule that executes the
$ B) {" v6 K8 m. j; `3 v // modelActions. modelActions is an ActionGroup, by itself it" B+ o3 Y; C6 T) |) {3 W- v y# y
// has no notion of time. In order to have it executed in
* N8 _+ P/ s- h$ _/ d) J // time, we create a Schedule that says to use the
0 v/ s5 m* d0 ?6 z) P // modelActions ActionGroup at particular times. This T. s( Y( Q, y4 s
// schedule has a repeat interval of 1, it will loop every
; V- S* g$ c2 B3 F# W // time step. The action is executed at time 0 relative to
2 c- G, C% s( ^0 E$ n // the beginning of the loop.
4 w6 ~2 P9 y0 p. t! k ]! d" t k
// This is a simple schedule, with only one action that is
) Q9 X e( Z- n5 K) Y7 _9 _8 C // just repeated every time. See jmousetrap for more
$ ?* F* q: \ X2 S& o* f8 p, J& m# v9 _ // complicated schedules.; ]! ^: V/ z3 G# u+ q6 M$ v" {
- Y/ O4 U7 m6 O# @, b7 D5 [
modelSchedule = new ScheduleImpl (getZone (), 1);
3 e% T/ y4 X3 m; h9 t# q' M/ k3 e modelSchedule.at$createAction (0, modelActions);3 X0 z3 C- L& l1 D2 \
, y0 O5 f# V% {! t
return this;8 |) J; f! O5 x) V: M
} |