HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: C7 l8 k. G+ m1 Z0 H9 \
& F( K1 b5 _) C; A) G public Object buildActions () {
# [0 Y6 s- i) U3 G: R7 b super.buildActions();! `2 a O4 g" J* ~ H
, ]7 ~( F+ P1 C9 A& h0 }
// Create the list of simulation actions. We put these in% l. X5 j8 G" S C
// an action group, because we want these actions to be0 \+ S7 \9 A! L; u, [' W3 U# g
// executed in a specific order, but these steps should
% N$ o- V$ @. a# [6 q$ w0 x // take no (simulated) time. The M(foo) means "The message
" f9 c5 c- F4 Q" r+ T" C8 V; \8 u+ e // called <foo>". You can send a message To a particular
% N0 W2 x+ ~& N8 j$ ] // object, or ForEach object in a collection.: l6 J6 a+ c$ x" a% X
. _ }; b5 t( l. H; h
// Note we update the heatspace in two phases: first run
' N1 y6 F- F, n! G7 s // diffusion, then run "updateWorld" to actually enact the- o+ u6 f0 v4 d- M% \+ U
// changes the heatbugs have made. The ordering here is
; p# r+ a. \5 P! O( e // significant!
2 V8 J$ i. k% B" z+ P 1 I9 @, X1 m- c0 Z3 m, ~% m& v% ^
// Note also, that with the additional: l0 X9 A4 ^: D4 U$ H8 h- J7 Q) k, w
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 O9 T, q# Q: i$ u/ R1 B j+ c' j
// randomize the order in which the bugs actually run
9 L* I/ C) P6 V' H A6 I/ H3 z // their step rule. This has the effect of removing any& ^, Z/ ?' n& m( S" [) C
// systematic bias in the iteration throught the heatbug
( g: m7 _7 r4 v1 ^! l // list from timestep to timestep
! s/ {# _7 x7 t0 ~$ I * u) [" h3 V) x* n0 x2 C/ Q
// By default, all `createActionForEach' modelActions have1 @- r2 v& y9 O/ ?7 C' j
// a default order of `Sequential', which means that the
6 g( h1 G/ l k // order of iteration through the `heatbugList' will be Q* s1 S, P) p' m, _
// identical (assuming the list order is not changed
! Q# y) x0 v; N' }$ Q // indirectly by some other process).: r. U1 ?8 @3 H5 g8 T
% m+ A8 K( y3 |& [6 Z0 W/ D modelActions = new ActionGroupImpl (getZone ());' x+ T( T+ I" O) L
) q1 d# I/ P. J. m% {! }2 @
try {7 `( J' Z+ `, z/ B3 r2 D
modelActions.createActionTo$message7 I' T5 n' | k M( H# Z
(heat, new Selector (heat.getClass (), "stepRule", false));% W7 B6 d r0 [- I; M, }0 q- B5 n
} catch (Exception e) {
8 t$ g* j* S3 ]- h7 `3 ` System.err.println ("Exception stepRule: " + e.getMessage ());
; z% Q# M# p3 Q; k [; E }5 ]1 p" z0 I# z1 j. N [9 {
+ H) h% p7 X5 y$ Q" g5 m
try {
' `& {& T+ W1 t) a" \& n Heatbug proto = (Heatbug) heatbugList.get (0);- f' R* K4 A% z9 b# h2 z
Selector sel =
X( U! Z' r1 `+ W( l0 \& u' o new Selector (proto.getClass (), "heatbugStep", false);0 x4 F( Q" Y( G' r6 g
actionForEach =
5 V5 B4 y; P. }3 q" g modelActions.createFActionForEachHomogeneous$call
& E4 f1 U/ V7 P) P U1 S$ B& W (heatbugList,/ g5 `# I4 e" [& A( s% @
new FCallImpl (this, proto, sel,
# h/ `1 P9 _. @4 a, x: s; U. ^ new FArgumentsImpl (this, sel)));
% S: @) A/ I( _0 ~ } catch (Exception e) {
- ~& J' T6 U5 S8 f e.printStackTrace (System.err);! A$ _% L. {' S6 x" t
}3 w1 }: o0 ?( X) r: G
; g/ e: b% F! q/ a' ~# A/ F+ O syncUpdateOrder ();/ ]& p- n- L+ G' o4 p
" l' `& O+ Z. m& E e- U) i. w" I) o try {& @: [" D# K+ M( b
modelActions.createActionTo$message 8 g0 E# |* e2 q4 v# O8 x2 r
(heat, new Selector (heat.getClass (), "updateLattice", false));$ r0 e0 Y% W4 W' Z6 k$ V
} catch (Exception e) {4 j# L+ g4 v1 g3 \4 U
System.err.println("Exception updateLattice: " + e.getMessage ());. p3 {/ \- k+ [ R$ F" m$ }
}
! J! h: ~) V7 m # T8 v2 R5 ^( R
// Then we create a schedule that executes the. C" A, @$ C3 u* B8 T
// modelActions. modelActions is an ActionGroup, by itself it
3 E, ^: u3 ~7 I C1 P; C! k // has no notion of time. In order to have it executed in7 s0 Q! u# q9 H8 _6 ?6 v/ c
// time, we create a Schedule that says to use the
% A2 c2 c3 L m. M7 a9 [9 V // modelActions ActionGroup at particular times. This- t& m: t8 v9 a" o+ e6 F J$ Q) S
// schedule has a repeat interval of 1, it will loop every+ y, Z$ T9 l! J; ~1 W$ D! v3 h
// time step. The action is executed at time 0 relative to8 n' ~# I3 j* S) r, T, \
// the beginning of the loop.2 W4 ~7 u% ]& w$ U
$ |) v7 I$ \% B
// This is a simple schedule, with only one action that is
: j- q8 r! {4 b8 D4 R0 s // just repeated every time. See jmousetrap for more
1 l& P4 ]6 t/ s+ j# m) \* Z // complicated schedules.
1 l' I4 g9 i7 q) @2 ]; G / U* o: w6 k2 ~3 `- ~# M
modelSchedule = new ScheduleImpl (getZone (), 1);( t0 T4 d$ i( t8 H, e* [
modelSchedule.at$createAction (0, modelActions);! p+ W0 c! p1 l1 N0 E& G
8 u+ g. ^1 G$ v
return this;
2 M& I2 f1 f. d3 J8 M+ x3 y7 _ } |