HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' |4 E5 I( E/ K, x& F, ?
/ j1 I& m$ H3 O( B! n0 C* h public Object buildActions () {
# K1 y4 g i- A0 [* C- @ super.buildActions();% J" k6 u5 X }; ]! G4 |/ Q) ~
% s9 _# s0 Y' Q! f, L // Create the list of simulation actions. We put these in" t! N |, Z6 w% c
// an action group, because we want these actions to be" B+ U2 d( g! s* w: f% L: d
// executed in a specific order, but these steps should) x1 s, j. n9 f" b- h w
// take no (simulated) time. The M(foo) means "The message
* V0 W$ p3 s) ]% [5 Z" { // called <foo>". You can send a message To a particular
" l: u' b4 N9 E. F9 Q // object, or ForEach object in a collection.$ p) ?( K( t% Q5 a$ o3 I# p7 W
1 P+ e) _( y6 j% N! r // Note we update the heatspace in two phases: first run
1 P8 \' o0 m- ~( T# L // diffusion, then run "updateWorld" to actually enact the' h2 t) Z) l0 _6 o9 V/ x6 I* |; I
// changes the heatbugs have made. The ordering here is0 v1 B, c0 q, p8 s0 o9 Z6 b, F
// significant!: I! J7 T6 M% \: i. r% [" Z
: i- j; L0 G6 h! T- H8 F9 a
// Note also, that with the additional2 z9 N7 _* X, K
// `randomizeHeatbugUpdateOrder' Boolean flag we can
A$ F# F8 p+ H5 l+ B // randomize the order in which the bugs actually run+ N: w3 V+ l0 M2 y8 l$ I0 O: z9 y/ N
// their step rule. This has the effect of removing any) v4 j- x" \ W T% I# w' {, q
// systematic bias in the iteration throught the heatbug \5 x; S( p3 P8 d# ]( v
// list from timestep to timestep# ~! v1 t" b" N2 V/ o
% k8 H* Q; V% n. B1 l8 T" ? // By default, all `createActionForEach' modelActions have6 s$ j+ V+ {1 P S
// a default order of `Sequential', which means that the
' I Y+ {& g5 A" i+ ^1 f2 X // order of iteration through the `heatbugList' will be
* h7 Y U) L! [ // identical (assuming the list order is not changed
. I; W5 x6 B4 _4 Z# P ^, C // indirectly by some other process).! e* \& U: N6 @2 m1 s/ Q+ w
! p4 g0 x Z" _, V# u: M, T
modelActions = new ActionGroupImpl (getZone ());* s4 j. J) ] s' r" p- F
8 t5 h1 x: }* o: H2 L. @- a
try {8 t) E) ?9 V# W$ t8 L7 |' P% P% O
modelActions.createActionTo$message
) u2 X) O- j+ ~" ^# b$ a" ~ (heat, new Selector (heat.getClass (), "stepRule", false));( g0 j5 h# k, V* k% d5 r: u$ i
} catch (Exception e) {
+ p$ P. G2 ~* P1 F: r System.err.println ("Exception stepRule: " + e.getMessage ());# J l( y' t9 k1 s
}
# ? ^3 C7 l8 e/ _) |! @1 b1 O7 \3 o3 E4 M* Q0 w7 c, ^+ c
try {+ W, z9 a1 m1 [2 k* R
Heatbug proto = (Heatbug) heatbugList.get (0);
8 ?( v ~2 C: ^1 e: C3 s% C$ d5 K' ? Selector sel =
( `) n7 Z9 h, o% `7 O! X5 H" j new Selector (proto.getClass (), "heatbugStep", false);% @# w# X1 m7 p' |
actionForEach =. F! m* w- ]! r0 k+ M) r
modelActions.createFActionForEachHomogeneous$call
0 l4 T" g l% V: X+ N (heatbugList,
6 u5 l4 A8 W+ T new FCallImpl (this, proto, sel,
2 R3 ^4 y1 ^5 [' F6 o: p new FArgumentsImpl (this, sel)));- J8 S$ F; Y' y- d9 R
} catch (Exception e) {
: F/ w! \3 j) d: A e.printStackTrace (System.err); U" O7 F( b( n" Z1 Z5 M- j* `) s
}, ^ O$ }" U! w# ?
2 b5 j+ Y0 E V2 C4 }3 M2 }; M
syncUpdateOrder ();" d/ }& i$ w0 C% D" B; h6 y, L6 S; E
3 u1 g( a, y7 t2 U: G5 t
try {
: L4 h4 T4 n4 J# S2 L( q" m modelActions.createActionTo$message 4 d" N# ^$ i0 u3 g* \+ F. {/ c7 M) w
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ X3 O. {, G, P% b0 v2 u } catch (Exception e) {1 S9 h: o' s) f3 y* d# F
System.err.println("Exception updateLattice: " + e.getMessage ());! k7 l: ~1 k8 b M
}6 v0 m/ G( ?0 r9 C9 b% n$ f- E3 a
2 [/ X* ]7 Y' D( a" d. T! X; r // Then we create a schedule that executes the! L; I; M" Y% P3 j$ w
// modelActions. modelActions is an ActionGroup, by itself it
7 N* A, l9 M `2 W9 X* o // has no notion of time. In order to have it executed in2 e! [) l, M$ Q3 n2 `! u0 \
// time, we create a Schedule that says to use the3 }, X! J: o( M! M2 D+ `# s5 B* @
// modelActions ActionGroup at particular times. This, h! @) k* }# H. Z3 P0 V
// schedule has a repeat interval of 1, it will loop every6 Z1 q8 F d, w% F
// time step. The action is executed at time 0 relative to) }# b7 g3 z' H0 ~4 s" W
// the beginning of the loop.
9 f5 B- B E6 }& _- U; a. `' P9 X3 s, ^$ p0 E. ^" G
// This is a simple schedule, with only one action that is
" R0 G2 y! c# C" K // just repeated every time. See jmousetrap for more
1 t) ]6 I7 M+ M9 Y0 Z // complicated schedules.
0 ^5 B4 |* h+ _3 n3 G; @ } 4 L$ X" L9 G1 F6 l/ n$ y
modelSchedule = new ScheduleImpl (getZone (), 1);) J) e6 `- _4 I/ A+ Q) u: @
modelSchedule.at$createAction (0, modelActions);. Y! O" X% N5 _2 B
( G; k5 u$ J2 L8 H& ], q return this;
8 o7 c* m/ J) p( ^4 R5 A } |