HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ b# W; F; c9 `' ]* e+ J( P) K! }; }) c2 H/ Z
public Object buildActions () {
; Q2 S, {: c; u" p4 h3 r0 `9 B super.buildActions();7 ]3 @, U3 q7 f% y9 _; Q8 [
8 w0 @9 T7 T( j; _& r# ? // Create the list of simulation actions. We put these in
6 P" q+ r7 V# d9 ~- B // an action group, because we want these actions to be1 ?, f6 O/ W( O0 C+ Z8 S5 o) N. X' i
// executed in a specific order, but these steps should
% A: H* f# U" |/ l } // take no (simulated) time. The M(foo) means "The message
( E( j3 g" x2 `9 s) m0 G // called <foo>". You can send a message To a particular
- i. ^% e0 R8 v& y // object, or ForEach object in a collection.( v+ q+ O- C9 c2 U( m5 w
8 V2 P0 ]; o" W( p: y2 Z // Note we update the heatspace in two phases: first run
: I7 u/ E- e: v // diffusion, then run "updateWorld" to actually enact the
, ~! A6 g$ Y9 G4 c. H // changes the heatbugs have made. The ordering here is1 A* ^; D- v4 M& @) Q0 B
// significant!
' m1 ^* s$ P; z A0 p8 a$ d - o: K# W/ P; m+ [$ W
// Note also, that with the additional
) ~% B" M8 P1 z& l+ O/ E! m // `randomizeHeatbugUpdateOrder' Boolean flag we can& o& o' N0 j; n: e
// randomize the order in which the bugs actually run
+ B# l! l8 E$ l) V: z7 W8 g // their step rule. This has the effect of removing any
6 u! D& p$ O7 I* ?7 j1 s // systematic bias in the iteration throught the heatbug
* A' w d: c) h' W5 Y // list from timestep to timestep
. b8 R/ [1 [$ O0 x) x U N( W 8 a; N7 f: `3 T+ O; \
// By default, all `createActionForEach' modelActions have/ {# f3 A) ^0 m$ ]. Z4 e" a
// a default order of `Sequential', which means that the9 l2 T1 z+ T Y2 _
// order of iteration through the `heatbugList' will be
; d, d6 ]0 c; T% ]8 A' U // identical (assuming the list order is not changed/ z& \8 v" E$ P1 x R4 T/ T9 j9 Y
// indirectly by some other process).4 ~# B' ]4 X0 g, n1 {
! b: c" h, J4 a& f
modelActions = new ActionGroupImpl (getZone ());
$ _6 u s0 d8 [, X: `3 ?- ?+ v% @0 t# [) f( m
try {
/ B, M5 ~0 P# t' Z9 X- e modelActions.createActionTo$message
7 {$ \ R5 y) o: i2 n* a" z (heat, new Selector (heat.getClass (), "stepRule", false));
3 X; k' W; o& f; n0 K8 A" j, M/ ` } catch (Exception e) {
; w- q# u. e( B4 a/ w. f+ @ System.err.println ("Exception stepRule: " + e.getMessage ());. v5 F- ~! m4 U+ |3 Q
}
1 f/ U0 h% b+ Q0 T5 d7 s% k3 @6 A1 R, V( E# m5 Y
try {
, \6 O. N; m7 c% N Heatbug proto = (Heatbug) heatbugList.get (0);
& @( r0 R+ x5 ~ Selector sel = . ?! a# `; o) ]8 r! J( u
new Selector (proto.getClass (), "heatbugStep", false);
& V6 t7 t+ j& P6 K K- z actionForEach =& _6 w1 t+ Y; u% P5 {
modelActions.createFActionForEachHomogeneous$call1 d* _8 u$ O; Y9 q, ~
(heatbugList,
0 i( i' K/ `/ M2 @ ]- e' U& J new FCallImpl (this, proto, sel," j0 w$ _. F- b( L9 r+ r
new FArgumentsImpl (this, sel)));$ u) C1 G; R* v5 `, D$ A) g
} catch (Exception e) {
2 g6 t1 ~: e6 X6 ?- }. m& g5 } e.printStackTrace (System.err);
9 B, [% q* D" C8 L0 L9 z a }
A2 T' h$ x6 @6 k2 G
: A, R% o- N A% V8 y9 I syncUpdateOrder ();
" Z0 L$ h- p! o1 q: [7 A& n4 Q0 c, q/ _! b( _( h
try {
8 U' `" Q7 U3 z modelActions.createActionTo$message
7 Q7 E ]6 m- X6 ^2 } (heat, new Selector (heat.getClass (), "updateLattice", false));4 g( J3 i% O" y+ Q
} catch (Exception e) {
- Y3 t* f7 N" j* ^& Y System.err.println("Exception updateLattice: " + e.getMessage ()); c3 v& ]/ Y6 T0 I9 o* l
}4 V( N# E; a* ]2 d, n- x
$ h( {. K& V' T1 v4 o7 m# Q
// Then we create a schedule that executes the0 e" c/ {# H4 t% d3 ~* L
// modelActions. modelActions is an ActionGroup, by itself it. ~- P j7 {0 W: a; k+ |
// has no notion of time. In order to have it executed in
) C- [+ r, q8 L7 k // time, we create a Schedule that says to use the
) c! n7 P, v5 s7 C6 A% q7 v7 E6 L // modelActions ActionGroup at particular times. This2 `( X7 [2 o* ~) ?$ @1 h5 m
// schedule has a repeat interval of 1, it will loop every
1 Q' A Z0 u: P4 s // time step. The action is executed at time 0 relative to
" N h+ e7 V9 C/ x% S& ?$ }8 [ // the beginning of the loop.. }: j( e0 |; ~$ R3 w. G
5 M1 K! \: }! F3 z% U8 Z. y% [
// This is a simple schedule, with only one action that is
" g5 z. G$ S* L // just repeated every time. See jmousetrap for more
- {4 [7 {6 J8 }% F' p8 V2 U* M // complicated schedules.
5 Q8 d# [- t2 G* \5 K: Z8 a
8 w0 Y( B. I: O5 U" z8 a8 z modelSchedule = new ScheduleImpl (getZone (), 1);
* ^ I4 f( ~; B" n. }0 ] modelSchedule.at$createAction (0, modelActions);
, _) ~5 x H( j9 g$ i
8 o8 S; r$ ?3 t6 p* h; X0 o return this;
9 [9 i3 u' s5 W8 H5 G } |