HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' }& F7 v! M1 ] ~+ h: ?
! G T5 Q' \! q8 k& P8 Y public Object buildActions () {' g4 }, n1 S' n; u3 A4 r
super.buildActions();3 u. o8 h4 {' C3 c- s0 L
. B/ g7 v6 a0 H6 J
// Create the list of simulation actions. We put these in
2 J3 `- f2 {; r; t4 A: z- W // an action group, because we want these actions to be
( v/ K( h$ B( }( e // executed in a specific order, but these steps should
$ b% G9 s5 y, S8 _1 ] // take no (simulated) time. The M(foo) means "The message
0 @8 }" \6 _; F" @- L7 s! z( } // called <foo>". You can send a message To a particular
: D- E: I4 D0 O: } // object, or ForEach object in a collection.6 N/ x6 t8 H$ Z0 X7 Q9 d
! B6 Q& r! s' k9 b5 L3 b | // Note we update the heatspace in two phases: first run$ `: }0 m! ]. W `
// diffusion, then run "updateWorld" to actually enact the" k. m, P3 }2 f9 o0 x& J. A' h
// changes the heatbugs have made. The ordering here is
8 O. _, Z8 Y" {2 u$ t- |. @ // significant!
# e1 j( h3 p" ^ * t g% o( z- w+ c8 W1 P
// Note also, that with the additional$ l" k$ v# `/ C2 ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 h5 D7 k4 m, ?- q! ?( G+ \
// randomize the order in which the bugs actually run0 D% T" c4 Y0 y! v" Z0 o
// their step rule. This has the effect of removing any
& J4 ?: _* y2 H3 m. W // systematic bias in the iteration throught the heatbug
3 y9 S, b; S5 a // list from timestep to timestep
9 i7 q' }5 [) h' ]$ W$ F7 g; T8 ]
1 a, w- j( _9 h& o // By default, all `createActionForEach' modelActions have
: Y- y: ^: m9 P3 G; v+ x* c' _" ~: @ // a default order of `Sequential', which means that the
0 m+ u8 z: q/ _8 V. h! a // order of iteration through the `heatbugList' will be3 _9 W' ^% r, E
// identical (assuming the list order is not changed
3 [( z) ]4 i# e: L. }3 H7 s // indirectly by some other process).3 @- X, E$ }2 y. D9 p
8 i( I2 i: w) ]: Y/ B5 ` modelActions = new ActionGroupImpl (getZone ());
) T* s5 J$ q& T$ C' o# G6 k; o: ^) r
try {
7 b) }& L) P0 Q; E: b x; P8 I7 {1 z modelActions.createActionTo$message
! L! `: _/ b2 J! J- G" f& b8 ]* { (heat, new Selector (heat.getClass (), "stepRule", false));
. F, O. x, X" f } catch (Exception e) {
& E! o4 d x T, Y7 D System.err.println ("Exception stepRule: " + e.getMessage ());
/ v" m$ X' }7 Z* I, { }) J. R3 j& B: h
6 M/ Z0 N4 U2 @9 `9 H2 `
try {2 h2 n6 X1 i0 U2 {, x$ A9 q) j3 I
Heatbug proto = (Heatbug) heatbugList.get (0);4 W" b7 l' F8 {& U$ R* A- v' A
Selector sel =
# [' d; |5 `6 n! O; }2 s- C$ q' j new Selector (proto.getClass (), "heatbugStep", false);
, A! C0 v6 D5 p/ X& m) T4 d' H1 A- _ actionForEach =( E: ]( O, e! p! j0 J. Z
modelActions.createFActionForEachHomogeneous$call
/ k, g! J6 m. g (heatbugList,. {" l- d: W& c/ n
new FCallImpl (this, proto, sel,
: a: D# q. [% f0 q0 k new FArgumentsImpl (this, sel)));
, N3 x9 u: ~% _; U4 I } catch (Exception e) {
3 c5 o% d8 |. H8 n7 {+ H& Q e.printStackTrace (System.err);- Q: ^* [$ d4 l- [ J0 f* u
}
4 y* _: `1 ]5 u% w# E3 n1 B1 r : J4 C0 E6 J [$ V7 q0 D" y
syncUpdateOrder ();
$ W3 e+ x, P+ ?/ N. y( J( O1 d+ {/ T) w3 `
try {" Q* D. x/ c: p9 @
modelActions.createActionTo$message , R9 ]3 q/ s# ?* `+ N
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 U6 Y" ~0 s0 b+ q/ v6 ~0 S } catch (Exception e) {
[& y b, t. W1 q* F5 z" _" b2 j System.err.println("Exception updateLattice: " + e.getMessage ());
$ \1 `% r* r0 i3 ^ ? }
8 T3 W% j1 Q {+ h( @; }, E ! L. V; c' Z& {3 s
// Then we create a schedule that executes the
' F# G2 Q" O _; u |% P // modelActions. modelActions is an ActionGroup, by itself it) Y4 a% k8 k% q/ q1 A2 L
// has no notion of time. In order to have it executed in
: u& {6 G3 h( J1 x \ // time, we create a Schedule that says to use the
2 j0 E8 U" n6 b, O9 x0 [" ~3 j' R // modelActions ActionGroup at particular times. This9 K! A# S* S" t- Z, l& S5 y
// schedule has a repeat interval of 1, it will loop every0 f" w9 \+ t% `( `9 w
// time step. The action is executed at time 0 relative to$ U, h% J& J; S& o5 {- ~
// the beginning of the loop.
S; G) n; G1 L8 K0 o6 _- {3 ^; U6 {
// This is a simple schedule, with only one action that is
( q- r9 ^4 t$ @8 K4 u5 T // just repeated every time. See jmousetrap for more+ g* n r; D$ j$ d* N
// complicated schedules.
8 ~" f U" j7 o
- }0 u& `- ^3 l8 P; \0 B$ p modelSchedule = new ScheduleImpl (getZone (), 1);
4 I( B# A J! y6 s* w modelSchedule.at$createAction (0, modelActions);! z# t' a: V2 X: X' I( C
j3 T; Z+ V& B2 Y return this;6 Y! D2 U8 M4 s6 r5 A3 t q( n
} |