HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 w8 k8 T, N2 J/ M! Y
" R2 k+ I# T2 `6 i+ |/ l6 N9 R1 a public Object buildActions () {) E& Z% Q2 w4 v/ H. n
super.buildActions();
/ E$ m, o% {3 i9 `
3 E" ?# O' a+ n8 s // Create the list of simulation actions. We put these in
T. w$ ]: _. N // an action group, because we want these actions to be
, r. i4 H& C. x2 g4 S8 O4 v& t( v // executed in a specific order, but these steps should& A) M8 u) h; g- x4 M
// take no (simulated) time. The M(foo) means "The message8 i1 j+ h! }8 Y9 r$ c- O4 n
// called <foo>". You can send a message To a particular
: S! G I- Q+ W) X; U // object, or ForEach object in a collection.
! c1 o( X- q) o4 x: {* b# y 7 e- g- L7 i0 E. y
// Note we update the heatspace in two phases: first run7 Y& z7 m3 b7 n" c( z ~9 A: x9 y
// diffusion, then run "updateWorld" to actually enact the0 @+ e% f1 k% p: @
// changes the heatbugs have made. The ordering here is' q$ m- j5 ]- N! t r/ _
// significant!1 l- a9 n$ v- o) V" X! g
4 O4 z; H0 H( ]4 B5 \ // Note also, that with the additional0 t6 Z8 N: j: |* t! A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. o# g) T$ E. P+ F6 _+ \) P // randomize the order in which the bugs actually run# u# `7 a+ {* G$ t* s& ?
// their step rule. This has the effect of removing any
; O) m1 M' T& u // systematic bias in the iteration throught the heatbug
9 s/ ?# @: k. W3 S // list from timestep to timestep( K6 @" A. b8 s+ [
0 y. E$ B- V( ^$ A. m4 C9 D5 N+ ^
// By default, all `createActionForEach' modelActions have
8 ?: Y. r* _ k6 ]' i // a default order of `Sequential', which means that the
, `7 S) t: c) i$ A' _/ d // order of iteration through the `heatbugList' will be
) f& A. R5 \8 v' [- n, c // identical (assuming the list order is not changed* T; t+ Q4 m* z& g X) w4 a
// indirectly by some other process).6 g6 V" g. j$ I0 q' g: l6 }
) U) s, Q O5 A2 Y. W
modelActions = new ActionGroupImpl (getZone ());+ L& `1 J: \# G8 S* g( @
6 O0 L, P6 G, C \1 l+ l
try {
2 Y V8 \) \8 M6 N modelActions.createActionTo$message( N1 \/ ], \3 i8 Y) I
(heat, new Selector (heat.getClass (), "stepRule", false));3 G) ^ u! F: [
} catch (Exception e) {! d# Y$ I, S: i M. v
System.err.println ("Exception stepRule: " + e.getMessage ());
/ q% S- R7 T. R: p0 D }, z5 ~ G- q6 A: P; S2 L ^ q
3 E( e- l# E) G | try {
) D3 ]6 S' A2 r" h6 q6 f% D0 P' U& e Heatbug proto = (Heatbug) heatbugList.get (0);
, o+ }) \; a0 S. Q- V5 o. _1 F' f0 E Selector sel = / d3 I+ Y0 Q; t/ c" W
new Selector (proto.getClass (), "heatbugStep", false);
0 B. S6 k! ?: K! r4 p: g7 _) s actionForEach =
. r/ P7 t0 ~% A- P4 ?" ~# _ modelActions.createFActionForEachHomogeneous$call
5 K4 ~, F- x- O" p6 C (heatbugList,3 A4 H: D( U' h* \1 d8 P8 Y
new FCallImpl (this, proto, sel,
1 [$ M$ [0 y7 d; a. b" b! k new FArgumentsImpl (this, sel)));
' F. S$ x7 A1 Y* X } catch (Exception e) {% f5 _6 s) o0 S ?) K( N9 a8 h
e.printStackTrace (System.err);1 J6 O" ?3 N2 U
}
* M4 e w$ }( f
3 B& o- V3 {$ F5 ]2 g. Z" b1 z syncUpdateOrder ();
X5 L7 _9 c& `6 J7 T2 X' h& m5 l' h
! `. S2 ]7 J; n- [& q/ w+ ] try {/ B) u9 x( }; a4 Y0 p4 A+ F
modelActions.createActionTo$message
9 E* L7 M' y) M$ x (heat, new Selector (heat.getClass (), "updateLattice", false));2 E" S! Q0 S3 z4 o9 h/ q, o( L9 o
} catch (Exception e) {3 j( O3 d T# b0 t6 }- {
System.err.println("Exception updateLattice: " + e.getMessage ());
a1 |; g& G1 T }
; B! I5 ^3 O' l& e1 N4 h, m& x
2 U" I) ~' X" v' @) b // Then we create a schedule that executes the
9 H: E6 |0 o8 t. }# ^4 X // modelActions. modelActions is an ActionGroup, by itself it# O: D5 t M# F% q+ w1 j( z
// has no notion of time. In order to have it executed in
* x W' M: K# z D$ r5 u ]3 ` // time, we create a Schedule that says to use the
; Y) Q: {0 w, d9 W2 R0 m* o( v // modelActions ActionGroup at particular times. This
) k' ^4 x T, c+ V // schedule has a repeat interval of 1, it will loop every- Z' {" O5 u! W
// time step. The action is executed at time 0 relative to
2 O* s$ a/ g# [0 X0 u: Y9 H- {) v // the beginning of the loop.3 k& c5 I+ v" Q& _% M, t& x) c
' v2 t: f. f( J9 r: {# _# K
// This is a simple schedule, with only one action that is7 |2 P" t* V, V, g# ~7 `: D
// just repeated every time. See jmousetrap for more
8 y, S+ F8 j/ Q' F* x, ?/ q3 O // complicated schedules.* o4 ?1 { T7 i- J
1 q# b. v5 h# _
modelSchedule = new ScheduleImpl (getZone (), 1);5 _0 y6 l, x# T* j: ]
modelSchedule.at$createAction (0, modelActions);' Q! G$ L0 m* U2 w# L! i
) Q9 u: E; J4 \ |) y$ H
return this;
- I: \$ u3 o' Y. A) d2 ~ } |