HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) r$ T, r/ ]7 v D. J
; x: X8 ^. e% S4 `9 K+ ^2 F public Object buildActions () {
6 _: C/ h0 z5 `% H% u/ l q7 a+ u$ ~ super.buildActions();
* n, T. C8 W- m1 g; S
' D" H2 n2 v- S: E* H. ]# d // Create the list of simulation actions. We put these in+ Y2 ]0 p& {8 f# z
// an action group, because we want these actions to be/ s& J9 P* E' C0 T# P! ?
// executed in a specific order, but these steps should& N* M1 ~# t- t) |6 W
// take no (simulated) time. The M(foo) means "The message
9 T( z# Z# [2 X6 O" Y // called <foo>". You can send a message To a particular
9 g7 X% S: ^' M, P // object, or ForEach object in a collection.; a) h# s. D6 P9 {3 _5 d
7 t: H% B @+ v, e
// Note we update the heatspace in two phases: first run) v g* Z2 j; D. X( S- n% t
// diffusion, then run "updateWorld" to actually enact the
0 P) Y, b5 K4 H // changes the heatbugs have made. The ordering here is' r, p) w3 {3 Z6 R
// significant!5 p, g Q0 e% G% a4 q
. c6 H/ Z5 P+ L8 ~ r7 P" H // Note also, that with the additional
& \+ h! I) V% k4 @4 |, @ // `randomizeHeatbugUpdateOrder' Boolean flag we can8 X; C! a/ ]: z3 z# R" n) Y: \; _
// randomize the order in which the bugs actually run
8 y* q" E9 X3 j& |* u6 a# b$ ^ // their step rule. This has the effect of removing any) L. f/ ^+ }0 E8 z
// systematic bias in the iteration throught the heatbug
1 s0 c/ `" }4 K5 K // list from timestep to timestep
# k; u2 i6 k& J, E# Y9 ^+ i
# z% E A3 Z- ^$ X/ e4 I( ^ // By default, all `createActionForEach' modelActions have
" t7 l$ g, z& R. O( i5 ? // a default order of `Sequential', which means that the4 H. ]4 H9 S% w9 O! j) m* F9 b- X
// order of iteration through the `heatbugList' will be4 o1 m- b6 B! }! j, R* t; C
// identical (assuming the list order is not changed
8 R! J& Y+ ?5 o# R/ } // indirectly by some other process).1 l9 d |) o- ~
# s2 A) w" p! ^8 W4 X$ K modelActions = new ActionGroupImpl (getZone ());7 ^1 A$ T3 D4 E( {% ]' @1 |/ j
5 w/ ^* I( K1 ~4 E2 L try {7 {: T: f1 N4 l" A( r- b/ P0 ?" i' g- k3 `
modelActions.createActionTo$message) s" `- c+ [" \1 ?: G+ ^
(heat, new Selector (heat.getClass (), "stepRule", false));
) x3 N, M# W& ?+ w2 H% X. \( r } catch (Exception e) {2 L* d( S% J1 V, W" \* R% ?+ Y
System.err.println ("Exception stepRule: " + e.getMessage ());
/ l* C8 o- M( a/ }8 Q }
# f4 g* M. z9 a# ], n4 |3 k+ |/ e& I3 ?: b
try {
' `2 n2 W; y& e$ z; U3 C: Z Heatbug proto = (Heatbug) heatbugList.get (0);
8 o+ O$ ]& z; N6 M& A Selector sel = 1 o7 t" o# F' C( ?! Q! g/ d3 E) ]/ o
new Selector (proto.getClass (), "heatbugStep", false);
$ ]5 p% _4 b& c9 \ actionForEach =$ A3 N- H7 x z1 m
modelActions.createFActionForEachHomogeneous$call
& `2 n2 f# {& z# X, L. h; l+ u (heatbugList,
: }% q+ y$ M5 \6 r new FCallImpl (this, proto, sel,; d- ^8 |# ]3 ~& U, V3 |
new FArgumentsImpl (this, sel)));1 N9 [: n3 E" l5 V3 }3 g
} catch (Exception e) {. U3 G2 y8 d4 l0 Z
e.printStackTrace (System.err);) n# ~% {+ q8 q. i: ]2 ?7 @
}
- l% u+ [+ Y, h% y# Q$ L* E3 z & D+ F- S% D! z" a
syncUpdateOrder ();9 t- h) Z; z8 G8 K
) g8 n2 m' B& F8 U% ~
try {
, h5 O; L) O* y5 S# z modelActions.createActionTo$message $ B% q& I _' y$ {
(heat, new Selector (heat.getClass (), "updateLattice", false));
& Y+ ~3 D) N3 @# Y- s( ?* O } catch (Exception e) {: ?( j6 h7 _" h2 u) ]
System.err.println("Exception updateLattice: " + e.getMessage ());
4 s- J. E0 Q" x, N* S) N" s% ` }2 T9 w5 U! l5 i3 n
5 J& ?3 G6 A$ o% V2 u. ]+ e+ e
// Then we create a schedule that executes the
7 T' z3 X8 q! ?! ? // modelActions. modelActions is an ActionGroup, by itself it+ ^6 `. l3 g3 u5 M& G" e: n% [
// has no notion of time. In order to have it executed in
$ l7 N: r, W, ^# F$ } // time, we create a Schedule that says to use the" q W7 v4 D' P p* Z8 i6 D
// modelActions ActionGroup at particular times. This! j0 q- y( L# b
// schedule has a repeat interval of 1, it will loop every7 ]+ l _; t/ |7 L
// time step. The action is executed at time 0 relative to
5 o9 f4 l" C: t8 L' i! ] // the beginning of the loop.1 Y* P b1 W1 w) ]! Y
( i. A* F. }/ A$ }4 Q // This is a simple schedule, with only one action that is
- H, h0 N2 M6 F, ? N" A+ P4 G0 ]2 C // just repeated every time. See jmousetrap for more5 T4 Q% r0 E4 _. Z+ A/ `
// complicated schedules.- w! ?. h8 Q# f3 y7 y6 d: K1 s$ C
- b2 |$ q5 g! b0 Z
modelSchedule = new ScheduleImpl (getZone (), 1);8 U( d0 M& x1 X" \7 Z
modelSchedule.at$createAction (0, modelActions);& }' L, \; `$ N$ G! M5 _4 w
/ k* N' I6 S/ W. r2 R2 n return this;
5 _9 U$ E! i. l7 L: Q } |