HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' s1 H, I( e1 J
6 c* ^" K0 o6 N: Z, Q$ q+ m
public Object buildActions () {" K% b0 e8 d b- D% K
super.buildActions();
! w1 X; r% q- D9 `( q$ E. X I . k2 Z/ f8 C4 m6 D, b6 K! u
// Create the list of simulation actions. We put these in
) ^- l0 l+ c# N; T3 [ // an action group, because we want these actions to be/ y2 x0 w% M' U% x% P' g# e0 F
// executed in a specific order, but these steps should( y" u- z) P6 b, t8 O
// take no (simulated) time. The M(foo) means "The message1 q9 m0 i# L' w* z& n( d2 A9 H
// called <foo>". You can send a message To a particular% r" L" o1 |! g0 M& A3 e X, }
// object, or ForEach object in a collection., C0 `' F# Z. Z( _/ z
[ i: \2 ?* l2 a5 h' y- K
// Note we update the heatspace in two phases: first run, n, a9 H Z" \4 F8 w
// diffusion, then run "updateWorld" to actually enact the8 Y/ q/ j' `# B1 [# \/ k
// changes the heatbugs have made. The ordering here is
' x E6 j5 c0 ` // significant!
/ C" g2 x% r% {. Q; N' e4 H3 { 5 x; k8 z. D7 c
// Note also, that with the additional
' \1 ?* h5 q7 m# J" K/ [9 B- W. i3 _ // `randomizeHeatbugUpdateOrder' Boolean flag we can4 [4 |: b1 o% h4 a8 V1 G8 D
// randomize the order in which the bugs actually run
' t: o0 ?- F5 A // their step rule. This has the effect of removing any
: S) g) r: `/ H0 m: d' G+ I // systematic bias in the iteration throught the heatbug1 Q7 X/ ^( o: i
// list from timestep to timestep: k9 {5 [7 A8 S$ n7 v1 @) D" L7 f
# b5 p$ A9 {/ F9 N8 m8 T1 Y0 n
// By default, all `createActionForEach' modelActions have- E$ T* r5 K: y! j
// a default order of `Sequential', which means that the, L- x( p0 p+ |2 N$ F( g
// order of iteration through the `heatbugList' will be
, w8 ]/ `$ H/ ~$ S4 }1 f // identical (assuming the list order is not changed
% j# ?( O' a O3 N/ X' n/ Q // indirectly by some other process).* l C+ `0 R. t
7 V O) q8 A+ f0 w! ^ modelActions = new ActionGroupImpl (getZone ());
0 U* b3 D$ l6 r& X6 v8 |! D# P2 o
try {
5 }5 i8 H9 e8 y2 X modelActions.createActionTo$message. h- L9 U e2 e, `
(heat, new Selector (heat.getClass (), "stepRule", false));- a& @ W# s' I* @6 |9 j4 h4 I
} catch (Exception e) {
* F: x# m5 y9 w7 j System.err.println ("Exception stepRule: " + e.getMessage ());
: }, `- U0 ^2 k5 _ }
, p' o6 w% k( e+ T) [& g! ]
% X8 n( W1 K/ N) J" E% y/ R7 q# B try {) F' O, K8 k* B' ~/ q
Heatbug proto = (Heatbug) heatbugList.get (0);% k- G U; ~; g
Selector sel =
, \, g a( T4 H/ u new Selector (proto.getClass (), "heatbugStep", false);' o% `0 G, }, |- y) t
actionForEach =8 Q7 Z6 V) K4 r8 C; }% n/ x* [
modelActions.createFActionForEachHomogeneous$call* \$ D. S4 p# F6 c
(heatbugList,
/ x9 X3 E) D0 u# g! k, A new FCallImpl (this, proto, sel,
% z: c- x& [! V new FArgumentsImpl (this, sel)));, _. @+ \( w$ F6 d3 h3 t
} catch (Exception e) {
c* m6 O' w6 @$ m7 U- A' a e.printStackTrace (System.err);
1 q) ]* w; {& i$ N& z }. {2 } |# O( N% V& {- v$ |
: N$ d) `9 g) l: A T1 r syncUpdateOrder ();
1 \/ A) u* {0 @, g- |
/ s4 l, S) H7 U! S; r" R! U9 X try {
( V B9 A3 K4 @* |/ o0 ` modelActions.createActionTo$message
% H) p5 M3 \9 o7 s (heat, new Selector (heat.getClass (), "updateLattice", false));
9 [$ M3 \; J# | } catch (Exception e) {
7 C' O9 h, u4 {8 |/ u2 Z b& Y System.err.println("Exception updateLattice: " + e.getMessage ());
9 U3 N7 w, ]+ u }5 N: ~0 q/ D& ^9 t8 {, V# J
: u% g# Q( X& j! X& l8 B# |
// Then we create a schedule that executes the
, a" V! L6 X0 i // modelActions. modelActions is an ActionGroup, by itself it
1 w4 F! [& a# L: Q' Q V$ T" I // has no notion of time. In order to have it executed in
/ C0 u: K, J2 `, N // time, we create a Schedule that says to use the
; w i* @! h2 w) H7 } // modelActions ActionGroup at particular times. This
/ a; H, u4 w& r8 B) N8 Z5 Y // schedule has a repeat interval of 1, it will loop every
5 n, l% @8 W" s; Z // time step. The action is executed at time 0 relative to8 A, x- H0 r& }: Q1 j
// the beginning of the loop.
* c: n9 U% g/ t
$ p$ D( ^ Z7 d5 v9 W0 N, U // This is a simple schedule, with only one action that is
- x _) R; I" ? // just repeated every time. See jmousetrap for more
& L5 Y2 d& e7 I( F) [" w9 i // complicated schedules.
& `1 N( p5 [1 V! _
# F/ m0 r0 @/ u: {2 ?. O2 I! ` modelSchedule = new ScheduleImpl (getZone (), 1);( e( q$ r8 t& g T
modelSchedule.at$createAction (0, modelActions);
& \8 G9 S! `7 r5 M+ Y 2 L# l9 C1 V5 x7 \2 }6 @5 m3 C! f" S! {
return this;
0 e8 U4 C) v; v; Z } |