HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 a, K9 ^5 C7 `% E5 Y
" m0 y, j9 e* k0 E public Object buildActions () {. z8 ~) Y8 l' M. @, |
super.buildActions();
7 J3 k6 c3 u6 T2 I! r8 S0 z- Q
# Z& p4 c( T" q# ]' e // Create the list of simulation actions. We put these in
1 y2 L' K) \& T3 o // an action group, because we want these actions to be
: R& W; V j0 X: z, e8 I // executed in a specific order, but these steps should8 E7 B& p# x+ a' R7 ?( Q
// take no (simulated) time. The M(foo) means "The message
8 P" j0 l9 V# Q // called <foo>". You can send a message To a particular' G+ t8 F1 V9 T" v, f" a% P+ L* d; b
// object, or ForEach object in a collection.
+ B: i/ h5 U5 [" n# V8 G) A% O; ^
* y; X: C# I9 v$ n" ~ w // Note we update the heatspace in two phases: first run5 F0 N9 m4 H6 K" B5 K/ l& u: W
// diffusion, then run "updateWorld" to actually enact the! N# B+ C3 j0 F r0 k
// changes the heatbugs have made. The ordering here is
2 N2 v+ R" s- n2 D. @ // significant!
% E$ M% `& A- \% f" w4 e$ D 2 S9 J) |0 v- C: c2 A; s( t5 S
// Note also, that with the additional4 `* m" N, O h) u% j9 j
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 T5 m7 B9 X6 t9 o2 f; r. r' ~
// randomize the order in which the bugs actually run
2 O: m/ u; R& y1 W. h6 h // their step rule. This has the effect of removing any+ D0 B. o. N& o9 {" h
// systematic bias in the iteration throught the heatbug8 P, j2 v- G8 D3 m. J) O$ b8 C; u
// list from timestep to timestep' c8 l( B, Z4 l
0 c! z+ e- J6 V- O3 T( t% x4 d // By default, all `createActionForEach' modelActions have. J: C: g/ z4 A+ c: D6 |8 _
// a default order of `Sequential', which means that the
! n5 \8 v( K/ W5 h# ~ // order of iteration through the `heatbugList' will be
6 U: C( S1 e" ?5 D. z5 [ // identical (assuming the list order is not changed
+ W, S, s e$ _ // indirectly by some other process).
4 \$ b7 Z+ D! N1 S+ F; _) |$ {" k ' i, l$ y" P9 f' a& l
modelActions = new ActionGroupImpl (getZone ());
& e) m) P( a3 U0 R6 \6 J
) L2 j; E% d$ u' Z+ h; { try {
7 d$ y7 }# ^; E/ i: C( p modelActions.createActionTo$message
$ [5 I% h2 F! n# P3 r1 h (heat, new Selector (heat.getClass (), "stepRule", false));; x, w, C6 f$ z4 k
} catch (Exception e) {3 T4 c: z+ {, Y L1 S+ L4 D+ S
System.err.println ("Exception stepRule: " + e.getMessage ());
4 c4 X5 s4 F I, \" n3 B }
0 k" t9 c0 r! {; |) V
( M$ y3 b. T% _) V% |# k A3 m) y try {9 R7 g+ @4 ~$ Q+ Y, o
Heatbug proto = (Heatbug) heatbugList.get (0);3 d+ b" m, s& M/ j* X
Selector sel =
; H7 M1 I9 G) L6 Q( K new Selector (proto.getClass (), "heatbugStep", false);5 k1 X, f6 O' B7 \1 E& [
actionForEach =9 o' o0 H7 h: x" U' F
modelActions.createFActionForEachHomogeneous$call
( j; `$ t8 b/ p3 ~ \ (heatbugList,- J% ~# G6 C7 A
new FCallImpl (this, proto, sel, |& G" D& X R1 e8 b b) v
new FArgumentsImpl (this, sel)));! v1 _8 x7 T0 ^) Y
} catch (Exception e) {
4 l2 H) l8 m) d5 w' B e.printStackTrace (System.err);
1 w! F0 e4 T/ P }
3 M5 s/ v" }1 w1 {, R$ t8 L / f z+ o) T- P8 z6 [9 T
syncUpdateOrder ();$ T; W4 g0 I- P2 O" K; R
; h/ c( g( F& u/ B3 T4 C- W try {
8 U# c3 S1 b# f$ u1 V" |6 ? modelActions.createActionTo$message
) L4 p0 H9 `: A, Q- k- U (heat, new Selector (heat.getClass (), "updateLattice", false));
/ H: z" R5 U$ `. y } catch (Exception e) {- W6 V; j( b2 a4 P$ V) [2 |( c
System.err.println("Exception updateLattice: " + e.getMessage ());
5 {- l$ S4 b. G$ B$ \ }! e* o, q* H9 ~" [0 N n
* D2 B( S ~1 k/ w. h, p // Then we create a schedule that executes the
& s3 Y$ A Y& N; ~1 z2 F0 H* z // modelActions. modelActions is an ActionGroup, by itself it1 ]) }1 n2 W" r3 Q6 d! y+ c
// has no notion of time. In order to have it executed in
& k r& z$ X) t) u* t. b5 i6 h // time, we create a Schedule that says to use the
/ B+ {$ s! h M. j. f: l // modelActions ActionGroup at particular times. This
) U+ s/ `7 ^( W v9 |2 | // schedule has a repeat interval of 1, it will loop every
5 i) c5 m" _8 h; x. H S. Z9 i. d // time step. The action is executed at time 0 relative to1 x8 T2 H! @, k* t
// the beginning of the loop.8 e6 y8 A% f8 m: y/ P
) i% }5 o) J) `$ O9 u; O) h1 R$ p* g // This is a simple schedule, with only one action that is7 I, s$ T' e2 e6 n4 `% s1 `8 }6 e& D9 e
// just repeated every time. See jmousetrap for more. c& U, b) i! R+ S% o7 m
// complicated schedules.6 z/ T1 Z0 j: R& d+ S4 ^
# F; }9 `7 o( _$ s0 `+ q modelSchedule = new ScheduleImpl (getZone (), 1);
0 B. e1 H$ o! g; w, H8 T; E modelSchedule.at$createAction (0, modelActions);. D$ R8 h$ L; P, y) @4 [- m
+ b5 c3 v! d! t! d8 g, ^% q2 [ return this;1 Z* B+ U h/ H/ w, K
} |