HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 v N+ @& Y8 U( \" a4 }
8 l, g- Y& {0 }/ Q6 s& ^6 [ public Object buildActions () {
9 u u K* [: F. F; B; d super.buildActions();; E. _3 g( S* J& ^+ m
- a: N7 C+ ^! x$ F% ] // Create the list of simulation actions. We put these in
! ]# ?9 _8 C$ o9 F8 U, m0 X // an action group, because we want these actions to be9 P; R! ?# `8 k. A- h) i
// executed in a specific order, but these steps should
9 ` F$ J. p$ f. ] // take no (simulated) time. The M(foo) means "The message
0 r% v& A: C: ?7 o. D5 }* N% S // called <foo>". You can send a message To a particular
4 G3 m, ?, j9 B/ I! s // object, or ForEach object in a collection.. V. l- Y8 H; z' Q& L$ |9 g
2 e4 n- q5 L: f4 \4 V9 \' [& |) q // Note we update the heatspace in two phases: first run3 K1 \, d0 e; q& ?- F% c! ^
// diffusion, then run "updateWorld" to actually enact the) U6 u( A$ X6 Q& ~. S
// changes the heatbugs have made. The ordering here is
G3 D' Q7 I2 ~* d // significant!- N% F8 T, e- h2 \0 W, G0 ]
- W8 R2 A! p! R // Note also, that with the additional% R7 B, o$ P" E
// `randomizeHeatbugUpdateOrder' Boolean flag we can" D9 i) Q- }) @: D5 S
// randomize the order in which the bugs actually run
/ m- x) \' I. R3 a9 V) _& l // their step rule. This has the effect of removing any
6 K. a, `1 n; [1 s // systematic bias in the iteration throught the heatbug6 S: _( D9 Z; M4 `) Q( }! Q
// list from timestep to timestep( L# n4 E, {1 o
9 q3 B0 _: ~3 S8 U& {' P( ] // By default, all `createActionForEach' modelActions have9 q( e& W4 ?' L U* K6 P9 _+ y
// a default order of `Sequential', which means that the
x$ Z, A" p+ \/ i+ N+ Q // order of iteration through the `heatbugList' will be
6 @8 v9 J5 K- t; Y [ // identical (assuming the list order is not changed
G$ h8 _" A+ E _9 k" Q // indirectly by some other process).8 e6 f# A0 M+ E$ [% J5 R9 e
" c! ]# z) B0 `
modelActions = new ActionGroupImpl (getZone ());( G* k* D3 ]: o6 [) @
# N; H4 T& e# t5 ?: u
try {0 o! j, p5 c* e# E$ S/ f1 K" k
modelActions.createActionTo$message3 ?5 ], J/ M7 r2 \% a ]; J- ^
(heat, new Selector (heat.getClass (), "stepRule", false));
3 P% Z" Q6 v+ F% O$ X; c- e } catch (Exception e) {
' l3 ^3 |. @) }7 L+ E9 Q System.err.println ("Exception stepRule: " + e.getMessage ());' B1 Z, B& D! s; P6 q& k [
}
; Y( S% @1 t/ Q& }/ A( N7 l, I
/ U! t- K7 w- E8 u( p6 n2 M try {# }* w- L9 t$ V3 z+ ?) J
Heatbug proto = (Heatbug) heatbugList.get (0);
) I& E* i4 ?7 M3 A) l Selector sel =
4 J- Q2 k- \# [8 v new Selector (proto.getClass (), "heatbugStep", false); Y$ t! w4 r9 ~7 j0 h
actionForEach =
3 u3 b) r: z$ h3 K. d& F8 R modelActions.createFActionForEachHomogeneous$call
! y" M4 M- r8 ?5 Z4 \4 H (heatbugList," ^. Z7 X. F+ O7 V( y. Z
new FCallImpl (this, proto, sel,* x( X! @3 r! S1 F
new FArgumentsImpl (this, sel)));
! D- o7 _/ t* o# s/ h+ i- | } catch (Exception e) {- S0 q/ h/ O8 ?3 d0 z& ?3 y3 `
e.printStackTrace (System.err);
* m( h4 W$ x( i7 c C }
% o$ s' m: E& w: b0 f8 }+ R2 h
/ O8 a: S% }: l! d- j0 d syncUpdateOrder ();, L! x: U; D# N6 Q3 o: g c
3 J# i) ~1 J4 `5 k* R0 k0 o try {
5 i0 b2 x1 i2 k Y modelActions.createActionTo$message $ v1 T, E) p5 R$ F
(heat, new Selector (heat.getClass (), "updateLattice", false));. Y' y4 W9 A( ~/ L
} catch (Exception e) {5 V# m- ~" k# G$ n
System.err.println("Exception updateLattice: " + e.getMessage ());
2 S; b* {! n/ a" l: g: y U }/ m1 B. o1 N- n! @. Q
) z% l; D- O/ d* I6 H, W // Then we create a schedule that executes the* {3 e6 r: ]8 U7 I1 H: Y+ h; I& E
// modelActions. modelActions is an ActionGroup, by itself it* J. |4 v) x+ }- X/ f. b
// has no notion of time. In order to have it executed in
4 a0 s7 }" V3 d: t // time, we create a Schedule that says to use the
( U+ K( D# E3 D2 f' m& N( B // modelActions ActionGroup at particular times. This
, W, I: ^$ b% ?7 V8 N! z7 ]9 w* J // schedule has a repeat interval of 1, it will loop every
& P& d; K8 m' b' j // time step. The action is executed at time 0 relative to
% S7 w( v2 @7 m a% A7 G9 s // the beginning of the loop.; q/ M/ z( a: E" _% f; F; ]$ A) H
7 o; E" P% }* N // This is a simple schedule, with only one action that is: R: T2 s6 ]3 D! K8 N7 E
// just repeated every time. See jmousetrap for more$ x$ ~' H' ?2 M1 Q& R
// complicated schedules.% N3 B/ e# T9 A- S
8 a0 ^5 M& E: p6 u% J modelSchedule = new ScheduleImpl (getZone (), 1); B& y- I1 N6 {9 m' s# B& R
modelSchedule.at$createAction (0, modelActions);
+ p, w; P! e1 A; B7 F6 j
/ z& Y1 W, b% ]: m& F return this;: D" Z. F/ g# M# [+ B
} |