HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 k6 p0 r6 ~) J
0 m( ?1 V3 o% @ public Object buildActions () {
! ^7 e9 K; f9 H/ r$ h9 d super.buildActions();
0 {" G) Y, S: _0 h 0 }6 P* d5 c& d8 Z) c% }: I
// Create the list of simulation actions. We put these in, l- z* s g# O7 h5 f; a) B
// an action group, because we want these actions to be
; i5 B# A* F- C, @( X: i( b // executed in a specific order, but these steps should8 q7 d) [! O* w/ Q
// take no (simulated) time. The M(foo) means "The message" O$ p! w+ L' {4 B6 G* v
// called <foo>". You can send a message To a particular
# l* f7 Q1 l) ]5 _ // object, or ForEach object in a collection.
' g" l! s; I/ A 6 p$ a* J. r1 l, O6 n
// Note we update the heatspace in two phases: first run
$ @( H- a$ n. }+ z1 ^9 t- C // diffusion, then run "updateWorld" to actually enact the3 G/ w& R R; v, {1 u2 ?
// changes the heatbugs have made. The ordering here is
2 \1 R. S3 w" }* } // significant!
0 @' a0 k& l" x! O- V# d
# F. J6 P; q4 B- C9 ?0 \ // Note also, that with the additional5 k3 ^ }. K5 {& Q1 o! P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& w, J! o T0 q5 r; w% ]8 G+ k // randomize the order in which the bugs actually run) D2 I5 k8 m, S8 M
// their step rule. This has the effect of removing any
5 I; A( Y, \3 l // systematic bias in the iteration throught the heatbug/ {9 [/ s( N [8 I+ [
// list from timestep to timestep5 ?: s8 o& w6 Z
4 k F1 G: a2 [+ x6 {. c
// By default, all `createActionForEach' modelActions have
% {4 z4 Z% e$ C9 e' U" a6 W // a default order of `Sequential', which means that the
6 e5 \% }4 p( g4 ?# T1 t% Q // order of iteration through the `heatbugList' will be
0 S% {; h! U2 C6 h# v // identical (assuming the list order is not changed
7 U5 F% v) ^9 o4 W3 w7 J // indirectly by some other process).$ Y4 S) @) \* |* h$ k7 a
; L! y( |% O4 h: C# c' m0 R2 S modelActions = new ActionGroupImpl (getZone ());
3 t% v5 u- i1 t* F% P
; H! l# B/ ]7 `9 R$ ~ try {3 z; [" k& J8 u+ a" I3 e( ^' ^
modelActions.createActionTo$message
# `' g; I* q$ J (heat, new Selector (heat.getClass (), "stepRule", false));7 P p; N, m/ T1 _7 ?
} catch (Exception e) {
0 h& @ x, w8 P- J9 U System.err.println ("Exception stepRule: " + e.getMessage ());3 e& a S8 ~1 i, ~$ T* I/ M
}) ]& o! f- S; @& E
4 j3 q# a4 z$ Z. l' ~( x) Y
try {5 B, E: Z; [, |7 l
Heatbug proto = (Heatbug) heatbugList.get (0);8 s4 s$ ?( ]$ F' O6 }1 I0 |
Selector sel =
! u) w7 O; s' o$ g: Z& L new Selector (proto.getClass (), "heatbugStep", false);0 }# U5 J+ R/ W# B) M- E- T
actionForEach =
8 _' W. K+ v+ D0 ?2 X4 s modelActions.createFActionForEachHomogeneous$call
3 c' y7 I) q! ~ (heatbugList,
s* u& k( W. | J6 G new FCallImpl (this, proto, sel,
% Z9 J5 f3 n" A. R" Z new FArgumentsImpl (this, sel)));5 A+ e. o4 Q4 {% `0 Z
} catch (Exception e) {
2 J' i. g) d% e; k* t" s e.printStackTrace (System.err);
; K* z2 \/ {# I! G+ z }
3 v a2 s3 L- c' D 5 Q/ ]+ N9 Z% l; G
syncUpdateOrder ();3 W& B6 h4 d: V. m6 x0 F
( T: O. e7 u S1 e1 ?
try {' G& @5 f5 i; H7 n1 s" ?0 d
modelActions.createActionTo$message 1 e5 T" q0 h/ r
(heat, new Selector (heat.getClass (), "updateLattice", false));
' b8 K. h1 j% a } catch (Exception e) {; l9 E' x4 l0 j' ?8 B$ S: Q+ }# n4 O
System.err.println("Exception updateLattice: " + e.getMessage ());3 Q F+ C5 Z, r
}
" f8 X+ S5 R* T
' W) l% N' g; J; J; e& f# [ // Then we create a schedule that executes the' a. \4 i& n6 u# {- m- O! T& ]
// modelActions. modelActions is an ActionGroup, by itself it
. Y! k6 U% `! I5 z // has no notion of time. In order to have it executed in8 q! h; U) j- C' L$ Z& w/ j% K
// time, we create a Schedule that says to use the/ `$ P( S* T; P( k
// modelActions ActionGroup at particular times. This
: Q* l: m+ ^) _" t4 M) b7 { // schedule has a repeat interval of 1, it will loop every7 v" ?0 J- y& r3 L J* V
// time step. The action is executed at time 0 relative to% R" M( M' `: `1 L: p8 `
// the beginning of the loop.' @# k4 |% `4 V! L- a
# m& o- m) l; y8 K9 I6 N' Y+ |
// This is a simple schedule, with only one action that is
9 O2 {' ]/ L( g" p9 @ // just repeated every time. See jmousetrap for more1 ], P& D# F2 T1 x, v3 t9 ^8 @
// complicated schedules.) I- N+ f% l( k: q
3 c6 r4 E, ?' w- ]9 A modelSchedule = new ScheduleImpl (getZone (), 1);
, L+ q4 P( ?% r5 X: p4 { modelSchedule.at$createAction (0, modelActions);! q+ Y' V# D+ R% L e' Q
' r8 ?7 ?8 k* y( F+ S* I6 U return this;. ^9 ?. H- Z' e. v8 A
} |