HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 ?. U2 {6 \+ _" I- U; V2 y, n5 o2 H. I5 |% \+ e2 {
public Object buildActions () {
; q8 i% O- w, y: O4 _( B super.buildActions();
. ]: S) S# v; G$ [ 3 M5 {: G$ V( Q( W t& S
// Create the list of simulation actions. We put these in
) L! c$ ]. o+ k: E/ g // an action group, because we want these actions to be/ V& r0 _ d2 z- S* S3 A2 t
// executed in a specific order, but these steps should
8 @; I' ^4 w% ?& {# c( ^ // take no (simulated) time. The M(foo) means "The message5 n: ]: D% \3 \' F
// called <foo>". You can send a message To a particular* w; K7 p* N5 [: t/ O6 r
// object, or ForEach object in a collection.( E! B+ ~' O! B6 `% K6 q
1 k* W* u$ v# T4 z+ e6 [- ] // Note we update the heatspace in two phases: first run; \% o7 D6 K$ ~. j; [9 U4 T0 x
// diffusion, then run "updateWorld" to actually enact the
; ]- E+ u0 R& V; _ // changes the heatbugs have made. The ordering here is2 ^% C; w {' k1 d, Y+ z/ U
// significant!
/ U, k/ b' G( [' i' S
5 c4 T- L" s3 ?" ^) u% v" S // Note also, that with the additional
% R+ Y5 N9 s5 `+ M* i3 U // `randomizeHeatbugUpdateOrder' Boolean flag we can7 K! }( X: Y5 z x
// randomize the order in which the bugs actually run
! j! W" W" e* G B E9 R // their step rule. This has the effect of removing any
, G6 l* t$ P' x6 b, V( Q // systematic bias in the iteration throught the heatbug
: ?& _* ~3 ^6 P& u1 K# ^ k // list from timestep to timestep: G; c+ S* `% o- `& W# ?
P; d! u' Q* M" d' R7 R; G8 M. F // By default, all `createActionForEach' modelActions have4 g$ T. E9 M: x
// a default order of `Sequential', which means that the9 ^& F' C6 P4 S6 V* J- W
// order of iteration through the `heatbugList' will be
" E, g& w0 S# r1 p: j% A/ c // identical (assuming the list order is not changed
0 d; [4 A2 B% @1 v' r // indirectly by some other process).
5 U% {" \# }. N* s% ~+ z
$ y. Y3 H; `& X! M* ?2 p modelActions = new ActionGroupImpl (getZone ());
" ?3 T+ X" q# [$ e
5 g) Q/ Z2 w9 _8 l2 _, T. C. { try {! ?+ \2 Z7 W0 s' o
modelActions.createActionTo$message" r% q: {! u: h. |7 [
(heat, new Selector (heat.getClass (), "stepRule", false));) A9 o/ P5 b% E4 s& L, p8 P
} catch (Exception e) {. U& g% T$ [+ x, P( a- Z9 F+ F
System.err.println ("Exception stepRule: " + e.getMessage ());. M8 N; e8 ~7 ~) L+ Q3 B0 ^+ ?
}
2 G/ F* X! Y: K( ~1 T8 a: m
2 d) F: @6 L9 @; F+ g3 {$ r try {' Y8 P4 A) _/ b- C4 J# i' \
Heatbug proto = (Heatbug) heatbugList.get (0);3 z, T" X1 V" y
Selector sel = $ S5 C$ L+ R/ H1 D+ i) U. Q
new Selector (proto.getClass (), "heatbugStep", false);& \2 P, }; `4 N: p) _: `! E
actionForEach =9 e5 j) Y) j8 ~( T6 J5 w
modelActions.createFActionForEachHomogeneous$call" ~+ S4 F- N9 t" v
(heatbugList,9 e: F% M% R5 ]
new FCallImpl (this, proto, sel,
3 \( r7 S5 _- @ new FArgumentsImpl (this, sel)));
( z' y6 p7 n ?/ C% V } catch (Exception e) {
+ l/ g4 M; ]" a3 j7 W1 ~6 o e.printStackTrace (System.err);
( ], E# M' l ]# r) S S4 h }
* A3 t* ]8 J0 ^2 `) b! h3 H; y) K
$ `, ^# R; h R6 w2 ] syncUpdateOrder ();8 c5 _: i( q( E9 U
3 r- T& ?+ [- e' y ]0 Q try {2 e, X: Z' @; y
modelActions.createActionTo$message . [" R8 C7 |2 P& i2 c/ O6 V
(heat, new Selector (heat.getClass (), "updateLattice", false));
- o' q; \& [$ j: d& k% g } catch (Exception e) {3 O& h" y& D: [/ \4 C
System.err.println("Exception updateLattice: " + e.getMessage ());
, b8 F. @ {, L. N# G$ s }
8 k# d7 S$ e0 A }) r
% W8 b, w# d4 }) m6 n! ^9 w( T0 D // Then we create a schedule that executes the
! H: H* u5 i6 X) B // modelActions. modelActions is an ActionGroup, by itself it3 [3 N4 {2 g% N7 |
// has no notion of time. In order to have it executed in
m( M8 P2 J5 p- G" w% w // time, we create a Schedule that says to use the
: c1 b( a! c7 x1 `/ u ^ // modelActions ActionGroup at particular times. This1 l Z+ u7 i2 L# _
// schedule has a repeat interval of 1, it will loop every, Z! e6 n2 C; @' @
// time step. The action is executed at time 0 relative to
' n2 c1 N6 N% F2 t9 e' G // the beginning of the loop.
v9 G+ ~8 M/ I( I7 C
% O; R' b* S5 f9 v; A* {+ ^" | // This is a simple schedule, with only one action that is
# g, e+ V- N9 T4 E // just repeated every time. See jmousetrap for more9 B. `; y: g6 d$ H& i" n
// complicated schedules.3 i# f% g- E- V
/ P# s' s+ A: x! z0 i* g modelSchedule = new ScheduleImpl (getZone (), 1);; Z% c+ R9 C b% f$ g+ S' P; S/ \
modelSchedule.at$createAction (0, modelActions);- L9 N0 y5 r7 D, S
0 e% l& H9 z( I* g7 k return this;
( F! x7 K7 h0 x) m* G1 k0 r } |