HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, {8 E# e4 V) o6 ^9 |: a' c7 M
8 {( h1 n8 e9 h- \* n, N5 M8 g public Object buildActions () {
6 \# o: p, h- @6 D8 q- U* d: U5 l3 m# t super.buildActions();
; r' n8 N m! F4 d Y0 \6 T
* r2 s9 w: Q$ o) f // Create the list of simulation actions. We put these in
% x" a# U% _# D" d* Z( [! V // an action group, because we want these actions to be
4 B& j$ E4 x$ d0 V // executed in a specific order, but these steps should7 r5 V2 {4 s- M" o2 Z4 s% P
// take no (simulated) time. The M(foo) means "The message9 v. }4 H& a% F1 G
// called <foo>". You can send a message To a particular# \; k; ?: n: }/ o, A* I, Q
// object, or ForEach object in a collection./ B" f) O& \- J
$ G k1 M, S( D0 Q // Note we update the heatspace in two phases: first run
`9 L* j. }1 C* s* M; P, S4 _ // diffusion, then run "updateWorld" to actually enact the
e, R0 M* w6 M4 s2 x& t$ D- Y! c // changes the heatbugs have made. The ordering here is
1 E! g# j1 F4 s p" U' ^" u" t7 T // significant!
2 o/ N1 F: B* g5 V4 L1 N 8 @' O- C- u) d' @: L
// Note also, that with the additional" z0 L' o, s5 W* ~/ T, G; T3 ?$ k
// `randomizeHeatbugUpdateOrder' Boolean flag we can" ]5 s, ?! G2 F3 G9 m$ d
// randomize the order in which the bugs actually run0 @9 t- J9 t; E! S# Y% d$ ~
// their step rule. This has the effect of removing any
. O" R. W v6 ~# E // systematic bias in the iteration throught the heatbug
- k+ X; o4 }6 }4 H; ^0 ]# \ // list from timestep to timestep8 \7 Q$ a. `) Q) t
) T9 |" D K' h z // By default, all `createActionForEach' modelActions have
7 y! R% i1 [3 M: K$ ~6 }: [% e // a default order of `Sequential', which means that the
3 C, |- t Q" r8 m Y! n // order of iteration through the `heatbugList' will be
% i( D7 l1 D6 w, Z: W9 ? // identical (assuming the list order is not changed
$ F! c+ s) L" Z$ h Z9 Z, z // indirectly by some other process).
/ F( U6 H* _6 |" C
( ^( |3 P* o- d0 a/ m3 l modelActions = new ActionGroupImpl (getZone ());
5 L" K" P! w% D2 D8 a6 G: ~8 }1 S1 t8 R2 S' c0 Y" |
try {: q7 u2 ~; P0 b: k* Y
modelActions.createActionTo$message: r6 j7 Z3 b: C- g, W
(heat, new Selector (heat.getClass (), "stepRule", false));- i( i* Q1 t/ ?- w5 y/ {6 I
} catch (Exception e) {2 Z# f9 ~) z) n& a9 B P
System.err.println ("Exception stepRule: " + e.getMessage ());; J, F3 N$ Y/ D' i# g
}
# K( `- |2 ?* T) e* A. p+ D* _) @ ]7 b$ i. {" A
try {
! j0 S) z$ y) ^5 Z* E% ^# u Heatbug proto = (Heatbug) heatbugList.get (0);
( C. q/ P( ?1 m2 i; C% q+ I Selector sel =
; y5 w4 X3 P5 f( ?8 j1 y new Selector (proto.getClass (), "heatbugStep", false);# q7 z% h) f% T: e. M! `
actionForEach =
1 w& X Q) ?. ?- A modelActions.createFActionForEachHomogeneous$call
- f$ m( Q5 E0 g0 v: Q9 V (heatbugList,
) b. w5 L; g1 r8 Q new FCallImpl (this, proto, sel,' k: T4 t" O! f2 n- q% S
new FArgumentsImpl (this, sel)));4 {" k a- g& W$ @
} catch (Exception e) {; [( U$ L+ u& I4 S
e.printStackTrace (System.err);
+ s4 d/ `! I4 d& y. x }
4 o7 j4 m4 M( W6 N0 n
. s4 h3 ]/ v0 T7 k! S syncUpdateOrder ();2 H8 E, _, Y! I; y: |+ o
3 \; L2 Y w R+ w% C. Q1 D try {( ~, h: b+ n; M4 l
modelActions.createActionTo$message & Z9 R- _8 K# D$ G
(heat, new Selector (heat.getClass (), "updateLattice", false));, g: B: g( M; ?* t3 C! F* o% J
} catch (Exception e) {4 f% J$ \7 x+ [4 Z
System.err.println("Exception updateLattice: " + e.getMessage ());6 u& B# U" r5 @) |) \( o* f- ?3 [. c& X
}
' v5 p0 a p% @. ^
# M2 l% R4 h f; p4 w) N, @: q' M( R5 v8 _ // Then we create a schedule that executes the2 k# m5 J2 ~8 |( O3 m7 J5 v
// modelActions. modelActions is an ActionGroup, by itself it9 G7 A# |$ F; j }7 J6 c" j0 w
// has no notion of time. In order to have it executed in* r. G) ~0 g8 C4 O. i
// time, we create a Schedule that says to use the
, s5 p$ @) r( @& r/ d0 H // modelActions ActionGroup at particular times. This. X$ ?- d/ @0 Q" {& S, Y2 k& g
// schedule has a repeat interval of 1, it will loop every# W. d, [. B# H1 S& h# H* a& g& j
// time step. The action is executed at time 0 relative to
9 j7 u7 }$ b6 n. y // the beginning of the loop.2 E5 W0 ^. p3 L) H8 f6 T
: |6 I1 ?. s" u( [3 A2 G
// This is a simple schedule, with only one action that is% c% C9 Y7 v) K' D) S+ D% l* V5 z
// just repeated every time. See jmousetrap for more
/ C$ t9 C) o; S. @0 w; N0 [ // complicated schedules.
% A' C' |, W- u8 L1 i 9 C/ r0 o4 D! a# \0 _
modelSchedule = new ScheduleImpl (getZone (), 1);* ]/ C$ T$ Y9 v: c, g/ N& [
modelSchedule.at$createAction (0, modelActions);
- ]* A+ e0 y( W# w" X1 N& O # d ^$ Z+ j$ I2 v" F( q4 B9 w
return this;
/ v* V, P; Q, `$ F" s" F2 s } |