HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ |: Q, g# ?4 D9 G% u5 b+ s" \
6 T% Y! `! H( Y" l3 o3 f8 Y public Object buildActions () {
q9 Z+ W% G3 @% W: K t3 S super.buildActions();) J& a, h; o# r; U4 L. b
5 I" p% `! k; M0 A P$ d z
// Create the list of simulation actions. We put these in$ h1 D" }. Y9 h9 [4 F- G7 I
// an action group, because we want these actions to be
/ W3 R7 k# w, z$ s! x$ Q5 M // executed in a specific order, but these steps should) G( l4 f$ `! n6 E# {& y
// take no (simulated) time. The M(foo) means "The message
" h5 ?, v& n0 q( p) v // called <foo>". You can send a message To a particular# \ i/ |8 L4 E; e2 J2 ` d+ o* G5 `
// object, or ForEach object in a collection.
7 S ^+ J/ |5 u
1 `/ N& U, ]3 z# o. G) C // Note we update the heatspace in two phases: first run
2 H- V; {9 w% N4 X ? // diffusion, then run "updateWorld" to actually enact the: e; B2 \! l8 c* _: D" K$ r
// changes the heatbugs have made. The ordering here is
0 |2 A" i- r7 N/ ~' k$ c // significant!
, _- S* q7 V+ z
0 ?. G9 F o9 X2 v! G7 c // Note also, that with the additional
9 T' g* C% i/ `) Q0 V" f // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 u4 f; m8 T. J. y p! i+ T // randomize the order in which the bugs actually run
+ o- F$ N4 a# l/ g9 o0 b+ U& v+ F // their step rule. This has the effect of removing any5 Q: H; ?0 j) Y' C
// systematic bias in the iteration throught the heatbug# @1 R( D9 K; }1 J' J A
// list from timestep to timestep. x# e: b! j3 x" S8 ?
4 r* B( o5 P! u // By default, all `createActionForEach' modelActions have& x* a# }) N. a/ ] y" M7 ^0 N" U2 |
// a default order of `Sequential', which means that the# f4 A+ K+ ^0 r2 ]4 o, x: @
// order of iteration through the `heatbugList' will be! T% c) J! Q3 c- w) ~) p+ R: Q$ L$ m
// identical (assuming the list order is not changed1 V/ w; O1 D4 D$ s1 `7 A& g6 \
// indirectly by some other process).8 ]) B1 M% s( `' E; p$ B+ O( E
2 \! Z% v7 L5 h modelActions = new ActionGroupImpl (getZone ());! M8 s, Y7 L8 E, q
1 V6 ]! v1 g- J) [ try {4 f% Y$ T8 U1 ]* D6 s0 D% s) x
modelActions.createActionTo$message0 g; X! ^8 G1 ^* u
(heat, new Selector (heat.getClass (), "stepRule", false));
8 R/ c, e8 N$ M/ p( E# ` } catch (Exception e) {
9 x: x. [! D& D9 m5 t# ] System.err.println ("Exception stepRule: " + e.getMessage ());$ _6 z6 O, q4 c$ W9 N2 ?9 x
}
/ J, n2 [" Z& ~8 R# Q7 ?7 F. q$ M
' P( ?0 m' M+ q$ A* q/ I try {/ g5 S+ ]7 K! z/ H }+ S {$ t
Heatbug proto = (Heatbug) heatbugList.get (0);
/ G9 S. j$ f' d* [$ H Selector sel = 7 z2 U3 S& g! m/ e* a" A5 J& r
new Selector (proto.getClass (), "heatbugStep", false);
* O3 P; O Y! F) R0 ]$ l D1 a actionForEach =
' A2 i& R1 t; N$ R1 w modelActions.createFActionForEachHomogeneous$call
1 f( O0 k% V% j0 }+ U/ i (heatbugList,, |2 |8 s( A! f3 W$ `- k
new FCallImpl (this, proto, sel,
0 y- T2 i# s+ p new FArgumentsImpl (this, sel)));
1 Y' _! J0 Z7 O0 C/ J } catch (Exception e) {1 Q( ~/ Y. L" H( | j0 g
e.printStackTrace (System.err);
; l8 h" I; X5 Y% P/ m }
) N# b3 g* N7 E. n U* M % f$ ^5 H, x5 ^" M
syncUpdateOrder ();, d5 A; G1 t9 V9 G. B* C
; `( h! N$ f% W7 ~
try {1 j" B- F/ W3 m( z! u8 a
modelActions.createActionTo$message & I7 q$ t" Q9 V/ g
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 a5 [' U! x$ v& `7 T6 c2 O0 ? } catch (Exception e) {
* l' i8 a7 U% Y( Y( z4 m System.err.println("Exception updateLattice: " + e.getMessage ());
- \- P9 H' y/ w }) c: B* g" \5 u1 [. }5 j
9 m$ L0 P7 B6 b
// Then we create a schedule that executes the
. m# M1 u" _7 z* y // modelActions. modelActions is an ActionGroup, by itself it
7 y9 S* o( \5 h U: R* p' q // has no notion of time. In order to have it executed in
2 h) a; I9 ] z // time, we create a Schedule that says to use the* L* S+ W: y- P g# w) |
// modelActions ActionGroup at particular times. This# a6 c; F9 d+ @. {
// schedule has a repeat interval of 1, it will loop every' n7 o$ x4 `) W- f
// time step. The action is executed at time 0 relative to
8 y8 w2 n5 W# @+ C // the beginning of the loop.% S0 P. o1 @; @
+ g7 w/ V, Y1 k3 r+ g
// This is a simple schedule, with only one action that is
$ S2 @) j2 X+ _" S // just repeated every time. See jmousetrap for more! }# e/ q/ E" ?; e% B9 R8 }, J3 H8 q
// complicated schedules., ?; A3 [7 A u9 L) n6 g
$ K1 X& h1 N S2 z+ w3 ?- n
modelSchedule = new ScheduleImpl (getZone (), 1);3 `2 X G2 ]+ k* X$ |7 f, b5 `
modelSchedule.at$createAction (0, modelActions);
/ p6 @8 @2 v6 j6 f
- {: U6 g( |% E return this;
" A3 b/ k" J) U9 p8 g2 O( j; J } |