HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 e |, w( f/ w9 s- J8 Z
0 j1 N; r2 h# t; N- N' ] public Object buildActions () {6 b* X5 ^: y8 E% R
super.buildActions();
6 I2 E" u. s6 |; h
/ U( q; V3 |6 f // Create the list of simulation actions. We put these in& W$ Z5 F7 I/ Q
// an action group, because we want these actions to be& f* [3 |" O! H' J! Q4 _! S7 ^
// executed in a specific order, but these steps should* |4 k* F( E! L, M) k
// take no (simulated) time. The M(foo) means "The message, O" e; {; x1 s
// called <foo>". You can send a message To a particular
3 D: O4 Y5 n! l* a // object, or ForEach object in a collection.! o. p; d; Q3 [9 x; D) c
' G a: o2 o" [7 h) f9 i) _; o
// Note we update the heatspace in two phases: first run: x; F, q6 ]$ X9 f$ j
// diffusion, then run "updateWorld" to actually enact the8 H" K$ n0 H! u3 D
// changes the heatbugs have made. The ordering here is! E* N6 ~: b* ?" W; u2 x$ H! d
// significant!
- v9 K! n6 N0 J: w8 Q/ x# f
2 v! O' g* e" l) v9 N // Note also, that with the additional% G3 s6 A" O6 N4 \5 S' C. x
// `randomizeHeatbugUpdateOrder' Boolean flag we can- P3 q3 D' l! C2 O
// randomize the order in which the bugs actually run8 _3 `' N1 E# I( R5 `
// their step rule. This has the effect of removing any M/ a5 X! [. u6 h; F* V, J' j' k
// systematic bias in the iteration throught the heatbug
$ G, Z _9 m3 c5 Z // list from timestep to timestep
. `' U- W# L9 g: x$ N - q. O+ h8 N% B1 F0 z* {5 k! I
// By default, all `createActionForEach' modelActions have
5 Q* ?" S) Y) E* J // a default order of `Sequential', which means that the0 Z' R+ |7 I5 O- c, ?
// order of iteration through the `heatbugList' will be
" U" C# J4 P: \- e; y2 Y; K) | // identical (assuming the list order is not changed0 b3 Z3 O- y" M: K& ~4 L
// indirectly by some other process).
! D! T3 V4 f; _3 H: J; E
( ~( q% `, `2 f, m( H: J, o" o; T modelActions = new ActionGroupImpl (getZone ());
) H$ L# H; j& T* R; _+ b E2 [* Z1 m9 k+ M9 C) j9 U7 b5 j
try {) C4 p3 B+ _7 w0 A) m
modelActions.createActionTo$message8 j- Z1 |- E: W5 z
(heat, new Selector (heat.getClass (), "stepRule", false));4 j: E( m. g3 ?8 K
} catch (Exception e) {
6 C( J, b% o d S1 `+ R System.err.println ("Exception stepRule: " + e.getMessage ());7 T9 |5 [. Z0 k% X* `5 v: s
}7 z/ o* L6 V! x" T' O) M
7 V2 s' t% q; H; x, X try {
* b4 O$ m5 P* n6 q O Heatbug proto = (Heatbug) heatbugList.get (0);8 Q( C& E/ b5 O
Selector sel =
% j. X' N" q" ^& y1 W2 e2 J new Selector (proto.getClass (), "heatbugStep", false);
+ B% _' ^+ h* n" d* w0 g actionForEach =
4 E; {# u+ p8 j- {; u. H: ? modelActions.createFActionForEachHomogeneous$call9 m1 c7 w% | r- P
(heatbugList,: i" P* {% B+ b6 \
new FCallImpl (this, proto, sel," z- q' l: {" K) q
new FArgumentsImpl (this, sel)));. X- _. E) Y( G6 K" h; F
} catch (Exception e) {9 `# Y$ j' D3 E8 u1 C: d
e.printStackTrace (System.err);+ r3 R8 l1 G# t, r% {$ X- `: p
}
9 X3 p+ n- ]& o9 R2 K; o5 e % U# a6 j2 t, k6 S5 g: t4 j
syncUpdateOrder ();
2 f: Q8 i+ ?# V- N7 ^& u- a/ ^& ^% i: O/ Z
try {$ m5 i% G6 P/ f2 b
modelActions.createActionTo$message 0 h1 L5 C" V7 e
(heat, new Selector (heat.getClass (), "updateLattice", false));9 o3 i1 z$ K# v$ O( U" C
} catch (Exception e) {# F! H, u" o8 S
System.err.println("Exception updateLattice: " + e.getMessage ());
2 ?$ J. S- b( k& h# Y }
- |3 q6 N" |# t$ L
, x0 E6 m. b* b3 O // Then we create a schedule that executes the
) D7 d t2 z4 f# B: B8 R" `- m // modelActions. modelActions is an ActionGroup, by itself it$ M$ U1 v+ o* g# M
// has no notion of time. In order to have it executed in
4 m2 K% n6 u p+ H' J2 r$ A // time, we create a Schedule that says to use the
3 C- K" c; A# |9 D: M // modelActions ActionGroup at particular times. This0 _+ e8 Y: s9 f b
// schedule has a repeat interval of 1, it will loop every j3 `6 F& p% y5 w4 Y
// time step. The action is executed at time 0 relative to! |" A. a' |" r& `0 r; D0 s
// the beginning of the loop.
2 T C1 x( l( l
2 o6 m) n6 S! ` // This is a simple schedule, with only one action that is
; d! b8 F* w m7 O; F/ |( V d7 n // just repeated every time. See jmousetrap for more- f3 }: q: @- k9 ~" B8 z
// complicated schedules.
. S l% {. c( g& N9 a& c
0 s) x `$ T& u6 l% ^ modelSchedule = new ScheduleImpl (getZone (), 1);) O" [: d- v$ k8 _. u0 o9 a
modelSchedule.at$createAction (0, modelActions);
( U% p; m- v3 T* @, r 4 K! S& ~1 @ d# T1 I/ r/ I
return this;3 d+ r/ T! n1 o# C. U6 G8 s
} |