HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ P2 G9 w' ~: m" A
! [; `; U* }2 A, U( V) k+ L
public Object buildActions () {7 r/ z/ a. D- e$ @5 G q) C
super.buildActions();8 q$ s- q. E7 H0 q6 Y( K
4 L; ~" o8 ]( J: T // Create the list of simulation actions. We put these in: X" O3 T2 D1 y$ U
// an action group, because we want these actions to be
$ g' x3 S1 u* Y7 e& I2 u2 Z // executed in a specific order, but these steps should
! y8 N' ^+ u {; U: S! u) H // take no (simulated) time. The M(foo) means "The message! R" s4 ]2 K* G
// called <foo>". You can send a message To a particular1 i# f& \+ W6 n7 u
// object, or ForEach object in a collection.
" @- v& F+ f0 v* s: C+ g 8 q- z: Z8 A: n4 \* ]" B8 ?' r5 T: P
// Note we update the heatspace in two phases: first run
2 m- `8 P. O1 ~ // diffusion, then run "updateWorld" to actually enact the. ]* x* P. _6 Y4 d8 [5 e+ N
// changes the heatbugs have made. The ordering here is& L& l+ R; m7 n8 _
// significant!
1 v( P1 k/ G9 C5 W) m8 ? 3 Y8 h* U- v+ j; k
// Note also, that with the additional2 b& g+ s+ ?5 c8 j, P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
W) ?2 F( ^5 M R' D# d$ ? // randomize the order in which the bugs actually run; t% P0 l7 w! M3 Y5 P- O# j ^
// their step rule. This has the effect of removing any+ n3 k. Y, M8 V
// systematic bias in the iteration throught the heatbug0 Q3 @) g4 \& z, k9 D
// list from timestep to timestep7 J/ Q& Q3 `0 a0 r
- c' ~3 e/ e% ]) H) X% i: ?" Z$ v i
// By default, all `createActionForEach' modelActions have
* Z- g* D. z8 A3 e% c // a default order of `Sequential', which means that the" i1 v& I9 X' }* ~! Y
// order of iteration through the `heatbugList' will be; l& ?7 ^# g2 L! m
// identical (assuming the list order is not changed3 u1 V+ K; q9 s b% N/ p6 P
// indirectly by some other process).; v% A& Z- p0 S% o
- I2 N' x3 |3 M. [ modelActions = new ActionGroupImpl (getZone ());
7 D1 d8 w# X) V
+ S; ]' u* @9 ~3 E4 O8 z try {
' o0 q! j' k1 Z! M0 h% m' ` modelActions.createActionTo$message
! Z) ?* V- U# T8 [, [* ^3 r% u (heat, new Selector (heat.getClass (), "stepRule", false));, ~) [1 }$ \; |3 n* T' `5 R7 {
} catch (Exception e) {
; f$ _. i4 r& C) p) n! K System.err.println ("Exception stepRule: " + e.getMessage ()); U1 |$ z7 w$ Q4 _! p& U- N
}1 X$ C2 q2 V2 ?& D! g! a4 ?
, }8 E3 r0 d! B( @; |! o/ P try {
3 d( e+ ?7 _- W1 B. m" D$ Q, P0 b Heatbug proto = (Heatbug) heatbugList.get (0);
, ]3 y: Z s' A9 D5 H M Selector sel = ) c1 q4 a: G" j' N* x1 |
new Selector (proto.getClass (), "heatbugStep", false);
+ g& N6 }. i. \0 p8 o actionForEach =) v. l. m/ I! ]
modelActions.createFActionForEachHomogeneous$call: J0 r+ G( K i3 F2 C( S2 C
(heatbugList,
" l- m0 F% o1 }/ d" m# N new FCallImpl (this, proto, sel,
" [5 L& _% F2 H0 p+ l' _0 N6 d new FArgumentsImpl (this, sel)));1 v$ d+ B1 R) t$ d; Y' D, X
} catch (Exception e) {3 p+ ]% T$ k$ t2 O1 m% j/ U$ h) @
e.printStackTrace (System.err);
( ^5 V2 N( I/ R }
. @( a* M0 ]# W' ^, K2 k # @! S6 k! G8 R7 u; R
syncUpdateOrder ();
0 l" q) D2 @9 y6 p4 r( f4 m' {9 i
4 z& J- H8 A1 U% p try {
1 ?& i" O: G, o! O modelActions.createActionTo$message & {9 ~9 s' X& p# j
(heat, new Selector (heat.getClass (), "updateLattice", false));
' {9 p6 S: F/ `; d$ H3 D } catch (Exception e) {
; x, i8 e# z/ s& b4 H System.err.println("Exception updateLattice: " + e.getMessage ()); `5 o; f: `( m0 Q' Y$ @) U
}; n/ v: D, }) _9 I
* Y' L, D" u7 c, h
// Then we create a schedule that executes the
4 N2 M3 M' p- V3 e) b( t // modelActions. modelActions is an ActionGroup, by itself it
2 |* S& _/ q" C% F // has no notion of time. In order to have it executed in: z' O$ s% O7 c J3 @
// time, we create a Schedule that says to use the( A$ q2 _( z. F/ H* ?( s
// modelActions ActionGroup at particular times. This
' R4 F2 H" S; n0 E+ t+ Y // schedule has a repeat interval of 1, it will loop every/ a# N# @) S* _) r2 \4 B
// time step. The action is executed at time 0 relative to' a% S$ v$ Y1 m' a6 |
// the beginning of the loop.
' F4 o* K9 ^5 e s! ?/ p- x8 F6 k; s+ C& [: \
// This is a simple schedule, with only one action that is
9 z' a8 W4 t2 a9 w // just repeated every time. See jmousetrap for more
/ n C0 }* G9 T4 N' T // complicated schedules.
* A; I1 D) J" a/ W5 Z, I
; n0 Z; A4 f8 S7 { modelSchedule = new ScheduleImpl (getZone (), 1);
2 Z9 V8 J. N6 k& M* O modelSchedule.at$createAction (0, modelActions);7 `: z' d( a9 [3 e# M5 X
# [" U, u8 e' l: O return this;1 ]# H3 p' w0 \1 F
} |