HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 e8 V) l. O( P9 p/ D) g
7 w+ b4 j" c9 F4 M2 I public Object buildActions () {
* {! K* S% T8 G super.buildActions();( N3 y, O8 Y8 T: @
5 N" S, n1 h( S7 w* t
// Create the list of simulation actions. We put these in
3 h9 q+ K8 A* W/ w& ] // an action group, because we want these actions to be
6 I" g; F7 r1 g; W7 T0 _; R3 E* ~ // executed in a specific order, but these steps should
7 f. W8 v; z9 q0 a3 I: ?6 A // take no (simulated) time. The M(foo) means "The message
* p5 W) J* H2 Y; [5 C B: z5 k // called <foo>". You can send a message To a particular/ N( \) O5 p2 `4 e" O
// object, or ForEach object in a collection.2 A; w3 }/ c4 v: W7 ^( J
, u0 r [+ q4 g( `! c' {. L // Note we update the heatspace in two phases: first run
" s% ?% h' l+ v) i0 L2 Y // diffusion, then run "updateWorld" to actually enact the
' y8 ]# v9 x( j7 W, W( l! e // changes the heatbugs have made. The ordering here is: {' f( a h. A, n
// significant!) @# x3 t& K" J
+ j, T6 l8 j. }2 f* k) m // Note also, that with the additional9 r: b& y. ?' l& s$ m* n, T/ U( z
// `randomizeHeatbugUpdateOrder' Boolean flag we can# z/ d. ], F; M4 W, r
// randomize the order in which the bugs actually run z! d8 G6 i/ X
// their step rule. This has the effect of removing any
' K: n1 w" T5 W @ ^" {6 T // systematic bias in the iteration throught the heatbug2 C9 g4 g9 ]' K) w9 k2 B
// list from timestep to timestep
- U# J. Z4 Q0 {; ~7 b/ b+ X7 _- o % l8 \9 O) @9 K( ^1 f, r9 z
// By default, all `createActionForEach' modelActions have
/ z. H) l G- z, \3 g // a default order of `Sequential', which means that the1 U7 M. q& g' y) [
// order of iteration through the `heatbugList' will be: C$ I+ l# V+ }2 |& y
// identical (assuming the list order is not changed
1 n, K) i; x' b // indirectly by some other process).. s- Z+ p+ q! h3 f$ _
' X, B+ Z) k/ U: C$ m modelActions = new ActionGroupImpl (getZone ());+ Q0 K7 [% x; s1 V3 I
$ u2 P+ B) ]7 x$ c4 _: w* p+ `3 J+ H
try {
# B b4 a+ u4 l) q8 R6 c6 n; O modelActions.createActionTo$message
9 R y4 K$ g% q* S (heat, new Selector (heat.getClass (), "stepRule", false));
. J' N) o6 k, F3 D } catch (Exception e) {
7 [* k$ \( ~# G- \) x System.err.println ("Exception stepRule: " + e.getMessage ());/ x) m: c* q1 s1 k7 _( n6 p. P3 o
}
0 l% o% F4 [( q+ f/ Y4 R4 v" t4 _
try {
/ o) R$ M: f6 A4 {, k L Heatbug proto = (Heatbug) heatbugList.get (0);2 A; \( r2 M4 h' p
Selector sel = 0 z6 S% j0 V- `" V1 g- m
new Selector (proto.getClass (), "heatbugStep", false);
1 ~' D% ~4 F) T% r) j4 ? actionForEach =
# e5 a" [& x0 b% M8 J2 _ modelActions.createFActionForEachHomogeneous$call, P- T/ H& ]) ~: k U3 T' H; S0 Y
(heatbugList,5 Q: ]% l: ~8 E1 l# [/ {
new FCallImpl (this, proto, sel,7 n) Z- h) g' J" s% ?
new FArgumentsImpl (this, sel)));8 H1 G6 e1 o+ K# s9 C
} catch (Exception e) {
3 v/ `1 v1 [" h& B+ n e.printStackTrace (System.err);
6 S% T4 `: O# D6 _. v+ Y }
- J2 F0 ~$ j0 {3 N. _) ? ! ~# f" B+ M8 v0 J) Q1 K1 [
syncUpdateOrder ();
3 z/ _2 t* Z( s0 E5 {
! S# f- t" ?# z9 c: R7 a+ ? try {/ q" I1 J# `: A, Y
modelActions.createActionTo$message 7 ~7 G4 _" m1 g0 y$ J- d z
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 ?9 f( k% e- A! c3 F } catch (Exception e) {
* m% ] M' }$ g: z& l/ S System.err.println("Exception updateLattice: " + e.getMessage ());
& t8 ]' K1 A; V5 S T }3 Z* ~9 T4 o9 I! t7 `
. {( [: }3 ?5 u3 U* K* O // Then we create a schedule that executes the/ l1 `) ^2 J5 i: t" @5 @/ L2 k
// modelActions. modelActions is an ActionGroup, by itself it
; j3 _1 m: ^& P) G. ~- s // has no notion of time. In order to have it executed in5 X& o. f; i( h/ ]" c: c
// time, we create a Schedule that says to use the# W- w' c- K# | A" R2 _
// modelActions ActionGroup at particular times. This/ Y& F7 y! ~. |0 T' p2 P
// schedule has a repeat interval of 1, it will loop every' |5 M2 ]- _ T
// time step. The action is executed at time 0 relative to
7 o& P. h6 [1 C1 B$ r1 P9 J // the beginning of the loop.
- U( v: d9 p2 R, c( p
G5 c# y3 e& ?. V; X" N4 M9 h // This is a simple schedule, with only one action that is/ O! H: i2 A/ q4 K1 b1 _0 r7 n! S
// just repeated every time. See jmousetrap for more
5 Y7 h' p1 [; W6 F% u5 {4 W/ T9 y& w3 i // complicated schedules.7 N+ F$ i: U9 ~3 r" w0 C
N2 K+ O4 C; n! a, }
modelSchedule = new ScheduleImpl (getZone (), 1);
. w4 T2 ~: N d/ T0 a7 G; v% N modelSchedule.at$createAction (0, modelActions);
' z( b7 k! w0 P! k, r3 s3 _ / n, w( Q; K1 E8 O) \# W
return this;
" Q( ^7 p( z% D1 W7 p8 J4 `; u- {8 C } |