HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% ]9 {1 Q6 W$ k( ]7 T; i/ F; H0 L1 C! A4 _3 g9 m6 |
public Object buildActions () {
( J" e- @' w0 }* u5 A4 v1 u% M, }4 y6 G5 G super.buildActions();
$ @4 @" @# `/ I. I # o& s3 D3 A% m$ ?1 U
// Create the list of simulation actions. We put these in
- i0 X* D$ C' j! m // an action group, because we want these actions to be' R. H9 I4 y7 X6 o& _; s
// executed in a specific order, but these steps should5 \# Y8 Y/ k$ G0 K2 E5 e9 ^6 d
// take no (simulated) time. The M(foo) means "The message% u4 M# [- c; i J& \
// called <foo>". You can send a message To a particular4 ~. s6 b2 x1 S' p$ e, U
// object, or ForEach object in a collection.
* R) {* E. A; g ~) e( V1 T7 S
3 S: g+ m' V4 @9 v% E( x5 U' b: ? // Note we update the heatspace in two phases: first run) P* W7 ?) s% u5 y7 {+ m- T% x4 K
// diffusion, then run "updateWorld" to actually enact the
7 ~9 C1 C# i8 q/ k // changes the heatbugs have made. The ordering here is' d* l7 _8 H* f5 B; |# {
// significant!
# g( l. w' D' E% t5 e( k
I2 q \0 C$ t# T- @ // Note also, that with the additional
' }/ \3 b2 v/ N+ m // `randomizeHeatbugUpdateOrder' Boolean flag we can
, N4 Q, a0 K$ i) u // randomize the order in which the bugs actually run
0 g' X0 U, ?& z9 ` // their step rule. This has the effect of removing any' K \- Q% e# N- p- E( c1 u
// systematic bias in the iteration throught the heatbug
' n7 k ?) q3 o, r* X, | // list from timestep to timestep: F. D& s) C9 ~# S
. m" i0 c" D1 X) J5 F // By default, all `createActionForEach' modelActions have
$ Z6 l' Y! ~: T# i) m l // a default order of `Sequential', which means that the
. a' T% T& |/ s+ P/ m; x9 G // order of iteration through the `heatbugList' will be
/ t/ K3 ~- R% y6 O3 [ // identical (assuming the list order is not changed) u( w- c5 ]9 S- b) ~. E& J
// indirectly by some other process).9 }# K# K% V o' C$ k b
5 @& `& ]7 V. v4 u3 N( y# j
modelActions = new ActionGroupImpl (getZone ());
4 H; {3 C. O. l% M* C
( E- X4 J3 t2 \ try {
/ r( o1 g- t! g D- ^9 D: L modelActions.createActionTo$message; M/ i$ O5 H+ F, u
(heat, new Selector (heat.getClass (), "stepRule", false));$ s! C& ^" X1 z# j& O
} catch (Exception e) {! L3 {$ O$ s# z; U' t1 e
System.err.println ("Exception stepRule: " + e.getMessage ());/ k7 a l) H% N2 d$ F0 m% Z! I
}' v. v+ s2 W; ~3 F4 A, _; `
9 D$ s" o* k3 p8 T/ _' @4 U try {
6 I- X0 h4 Y- F& }2 ~' }' Q7 d3 ^ Heatbug proto = (Heatbug) heatbugList.get (0);
7 p2 K5 R7 n t' O. i Selector sel =
: f e# L7 u- L. S$ u# j new Selector (proto.getClass (), "heatbugStep", false);
% _' h, d$ L! s# W& A9 | actionForEach =
' G' G1 t4 X q7 |# G modelActions.createFActionForEachHomogeneous$call
& `& H5 H' N* ]1 K" p8 { (heatbugList,) K: @; u2 W) [& W) \# d0 I _
new FCallImpl (this, proto, sel,
7 j8 S9 k" u! X# I new FArgumentsImpl (this, sel)));; H' y# x+ ~# c2 k: B
} catch (Exception e) {
1 K& t( X2 C2 D5 h2 m e.printStackTrace (System.err);% M x$ }8 n7 w' G% D
}7 @9 a7 W& f/ Y" m/ M8 d+ A
( T! Q0 j' Z7 u5 [/ W6 W
syncUpdateOrder ();5 z, \0 v* t, B' l5 W' c
. ~! s# b# v7 ? g, g
try {
1 ~7 |& r* P6 R. L modelActions.createActionTo$message " y" p; ^3 Y4 k0 E
(heat, new Selector (heat.getClass (), "updateLattice", false));) C$ G9 A& Q8 r! k% g9 V. `) m! _
} catch (Exception e) {; z+ s0 z5 k- T9 |, O3 X F$ I+ ]
System.err.println("Exception updateLattice: " + e.getMessage ());
" H8 K& r/ |$ r+ i }
1 N: _: h# J6 h# i( s6 i G7 |
w- C+ ?/ {" l! f$ _( `' M // Then we create a schedule that executes the
2 Q" L7 x7 t: Q // modelActions. modelActions is an ActionGroup, by itself it
5 I+ u4 H' r. F8 f* a // has no notion of time. In order to have it executed in2 S" P: I) m. N* g
// time, we create a Schedule that says to use the
) F& s$ A! K) y( J // modelActions ActionGroup at particular times. This1 k2 ~( H6 u$ q, d- Y# S
// schedule has a repeat interval of 1, it will loop every
) A! |* I; Y; r // time step. The action is executed at time 0 relative to
2 A. E& d* X6 I // the beginning of the loop.
" O @: b6 a, [6 a* L( n; a% [/ h( g- L2 T. p* I( g- r4 w( a @% J
// This is a simple schedule, with only one action that is L: V+ n; T( @2 n
// just repeated every time. See jmousetrap for more
6 _& W3 {; A7 x // complicated schedules.8 ~5 S5 A) T+ m6 x0 s2 t0 S' @
/ j# X) a- G& Z" B& `# I* [ modelSchedule = new ScheduleImpl (getZone (), 1);5 Q6 g. V+ t5 J& P# o
modelSchedule.at$createAction (0, modelActions);( H2 P3 R, h# |
8 f: |$ Z% c9 ~" v H return this;
! |" V0 f1 G7 W! M } |