HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; M: g1 q* `' Q, p7 _
: j5 i4 T( R4 p3 x; }# x
public Object buildActions () {
4 s& |& A- \: e! B3 ~2 O super.buildActions();4 ^$ o ], O/ E& M
N; d! o. V' `+ g* ]+ x
// Create the list of simulation actions. We put these in6 X+ o' Q2 `8 R+ ~
// an action group, because we want these actions to be
( j: }* F/ s/ p( }3 X4 o2 U // executed in a specific order, but these steps should
) i# z: V) u5 T+ g0 \" a // take no (simulated) time. The M(foo) means "The message1 [; W% c, d9 r+ H9 `
// called <foo>". You can send a message To a particular7 ~& B) P' z7 Y' z% n% v
// object, or ForEach object in a collection.
% B( ?% u6 K& N" g2 W' u* z) U
; z. D7 Y& \6 u // Note we update the heatspace in two phases: first run X7 i8 f- `) ~/ n# ]- O" D" n
// diffusion, then run "updateWorld" to actually enact the
7 g4 j- r# y, x6 k* w1 M // changes the heatbugs have made. The ordering here is6 a. ~7 m4 P* g" o! G C8 T
// significant!
: [1 I: Q+ ]" R- x3 R4 }$ S 7 ?9 ^5 l" s- A1 X* `. \. N
// Note also, that with the additional
9 e R" |! N6 @7 o // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 Q. h* f/ E1 @: H! S U // randomize the order in which the bugs actually run' A$ k! i! p' l1 _, c- U' s/ A: k
// their step rule. This has the effect of removing any
( X, [0 r3 |6 t% P/ F# d, ]/ O3 n // systematic bias in the iteration throught the heatbug
* A1 b Q" |0 x3 w0 V% S; m3 N" O // list from timestep to timestep3 U9 L) V1 T1 v: U. }; i7 X5 W
5 _! N' P' a. h3 F4 @% G
// By default, all `createActionForEach' modelActions have
8 q" t7 X# Q4 e0 A; ^ // a default order of `Sequential', which means that the
4 f! l# f" s+ N: {5 o, h // order of iteration through the `heatbugList' will be
1 @! N& D& j0 t- v3 I* L# @: \2 a // identical (assuming the list order is not changed
# K& ]9 A2 G% I& [3 ] // indirectly by some other process).( r6 O. ^& N# b6 Q- \
0 ]7 X* A6 n# i' m
modelActions = new ActionGroupImpl (getZone ());
" H) y& D7 F: P% D5 [4 ?& w& H6 @% P
try {
* F4 e/ y9 j0 U" _ modelActions.createActionTo$message8 B7 t, W; s& z7 l) g0 x
(heat, new Selector (heat.getClass (), "stepRule", false));" e2 ^; K$ H8 p4 W. `8 L& m! U* S
} catch (Exception e) {
6 K: S% a; |& k& k System.err.println ("Exception stepRule: " + e.getMessage ());
* k# k ~8 W1 P/ W, v/ y7 H }
" X* H" y/ n- o6 J5 s* N
% n. @" s- c' a0 Y; G try {7 |0 l- z( n* c8 \$ i9 b7 ~
Heatbug proto = (Heatbug) heatbugList.get (0);0 d: U% f) j( j7 D
Selector sel =
. v) Z3 Y& n3 F- g new Selector (proto.getClass (), "heatbugStep", false);
- n* s3 p0 h* l r, M% w actionForEach =
* Y4 B; u9 I$ C$ [# }% p modelActions.createFActionForEachHomogeneous$call: K# L/ L5 K# Q; D/ _, ]+ B' k
(heatbugList,
|9 V* A k$ d: W3 B y- F- V2 y new FCallImpl (this, proto, sel,+ H6 X4 m' [- S7 T
new FArgumentsImpl (this, sel)));
$ Z m/ t" F$ O; `1 e } catch (Exception e) {
/ D+ ?8 ]2 s0 P2 s7 m' R e.printStackTrace (System.err);# C4 a# [" m6 w# p
}# b* j+ @2 {, i% C6 y8 t
' x; i3 Q- s% G
syncUpdateOrder ();! g0 ~/ j: u8 E& k7 @' O! n4 e
! f$ s# U. T* e* {
try {6 S5 n0 _, |( `3 b7 X7 n
modelActions.createActionTo$message
3 y7 j: F5 g6 Y# c (heat, new Selector (heat.getClass (), "updateLattice", false));5 d- q* ^3 P+ P1 V: j) m( d+ z
} catch (Exception e) {: F# p& y" l" O+ `3 u
System.err.println("Exception updateLattice: " + e.getMessage ());* {) H& n+ g% A; f8 }- }. y
}
4 |9 C- n* X% e
' P0 m+ _, I1 N6 F# C6 _: a // Then we create a schedule that executes the
. k. h) B9 B! a6 G+ p: `1 c8 V // modelActions. modelActions is an ActionGroup, by itself it
' n0 g" K5 Z% p% D$ e. @ // has no notion of time. In order to have it executed in
2 P8 P$ k, h9 p9 P // time, we create a Schedule that says to use the
, G1 X. _8 c+ n/ b" B8 B) T$ `' ? // modelActions ActionGroup at particular times. This
7 ^3 M1 ?) R$ I7 g' ^6 d7 X2 Q // schedule has a repeat interval of 1, it will loop every
6 d3 O; T5 `) G // time step. The action is executed at time 0 relative to7 A3 V1 N5 U G8 V3 y
// the beginning of the loop.( g, N! h0 y8 A& |, H
/ I$ Z' i- O- h3 i+ E // This is a simple schedule, with only one action that is
$ V: f: a$ B0 O+ y- t: d) Y // just repeated every time. See jmousetrap for more, V+ ~9 y# d/ O% ^
// complicated schedules.5 z0 @; h4 K R# n k
# q# @* E7 M5 X7 z$ X modelSchedule = new ScheduleImpl (getZone (), 1);
3 v$ j4 {* ~1 L, r1 b$ g modelSchedule.at$createAction (0, modelActions);
+ f1 E y, G' T6 ]4 `" X ! @6 [, O4 [: }, ~9 x; O
return this;7 Z6 k i! r( a( k
} |