HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* R5 j4 l" t, V: a! a* Y* E3 H0 j# I- L
public Object buildActions () {6 H4 t- f9 e: E
super.buildActions();
! p Y* y- P2 @
( o. ]7 z T" q: D \, I* I // Create the list of simulation actions. We put these in
* e% q+ p( }7 Q: r0 F/ o // an action group, because we want these actions to be
$ y# `! K2 x9 r // executed in a specific order, but these steps should: a* ~( G- B' S# Z7 d
// take no (simulated) time. The M(foo) means "The message
# @5 R( v5 c- R+ w( m, w( q // called <foo>". You can send a message To a particular& k k8 I1 [9 a6 [' `6 \
// object, or ForEach object in a collection.5 J' [" b% {/ g, O" G' j. T1 q7 z* j
6 [! [+ ~! _ p3 y" S+ \9 g
// Note we update the heatspace in two phases: first run6 r% Z' R) E" `2 B U' ] ]! w3 F- S
// diffusion, then run "updateWorld" to actually enact the
a( m/ F1 m; ~; M O0 L1 h" H1 D2 X // changes the heatbugs have made. The ordering here is
7 ]/ _' z/ u/ t5 |/ v+ T6 R, N0 t; U // significant!
+ z7 z6 x; h/ O! Z `, e4 O* i : N5 W" @; ^0 S9 K
// Note also, that with the additional
5 H' B- i8 u [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 e% o/ m) E; A, h3 x5 U) Y // randomize the order in which the bugs actually run, J! |( N! a3 l2 H/ D5 b$ I
// their step rule. This has the effect of removing any/ k1 ^/ J2 S2 M
// systematic bias in the iteration throught the heatbug6 {8 R3 _' e; e
// list from timestep to timestep$ ?! K2 s6 U1 n3 Z8 N1 d3 v
% S4 d/ j! R9 o* e) u& F8 P
// By default, all `createActionForEach' modelActions have6 M( }3 {% W+ L1 k
// a default order of `Sequential', which means that the m7 @2 N A" a8 D/ t8 A: e: R
// order of iteration through the `heatbugList' will be8 L7 q8 O. Y0 `/ o) V
// identical (assuming the list order is not changed
* A3 u6 g0 A+ P; ~ // indirectly by some other process).
/ B; l3 r q9 c' G 5 P& N/ h. j( X) @$ j, c
modelActions = new ActionGroupImpl (getZone ());4 ~& z3 j- @' H# c: c
, l3 W* P4 z6 l2 I
try {
+ d" h1 u+ H% n7 D: Q modelActions.createActionTo$message2 S" h7 @ e4 U* p3 X
(heat, new Selector (heat.getClass (), "stepRule", false));( P7 t% S1 [) T. e
} catch (Exception e) {
% Y1 U( J; O: f/ _. ^) X& z System.err.println ("Exception stepRule: " + e.getMessage ());; r1 M! h, x9 C: m6 ?+ R
}
% x! M, I0 Q/ C3 }3 U+ k" m: u# k! E) ^: t
try {
' Q& q# P8 l% {. r6 [3 K Heatbug proto = (Heatbug) heatbugList.get (0);
7 U0 Z$ C% O$ X) T+ p Selector sel = , C& N, j6 D9 S; O6 }
new Selector (proto.getClass (), "heatbugStep", false);
- i% m* J' ~" r# q actionForEach =
" N3 U/ Q9 C2 V0 k0 a( ^0 b4 E; Q modelActions.createFActionForEachHomogeneous$call
6 N/ [' G: W( a5 f7 V6 Z# A9 u; k" j2 M/ \) A (heatbugList,
) ^ K" [& w4 B9 { new FCallImpl (this, proto, sel,/ O! Y. y9 P# k' b& n
new FArgumentsImpl (this, sel)));2 k h' k8 h& [- Y: e
} catch (Exception e) {# a8 Q' e8 }% m) G
e.printStackTrace (System.err);
1 x7 Q' `7 J; n }) r3 f) O% u+ X; ?$ ^
7 B# D2 w! w1 L& ?) a5 @. O
syncUpdateOrder ();
, Z, S8 f- r! L) Q2 }' ^2 Q, V9 y2 J) X
try {. W9 X* w$ a0 {4 B
modelActions.createActionTo$message
2 S) E; O; | w (heat, new Selector (heat.getClass (), "updateLattice", false));
4 m. H; o9 r6 x: Y9 m } catch (Exception e) {' |$ p' f8 A& y5 U) o
System.err.println("Exception updateLattice: " + e.getMessage ());
; n; Q" _2 k' t; B5 J }
: y, e+ i/ a& v- O5 F3 C* P 7 w/ H1 r8 B1 y8 ]6 ]% M
// Then we create a schedule that executes the
9 Q7 B4 D! [6 W, d // modelActions. modelActions is an ActionGroup, by itself it
2 K; P/ G$ Z. E$ M5 O // has no notion of time. In order to have it executed in7 `8 J/ k' W; b
// time, we create a Schedule that says to use the0 k( s q8 \0 V5 N& j$ s% N
// modelActions ActionGroup at particular times. This
, g' p1 I# l/ m) y // schedule has a repeat interval of 1, it will loop every
/ A( n; a! t* V, {; k: p O // time step. The action is executed at time 0 relative to, N& W& A+ q3 d z; P2 R
// the beginning of the loop.7 ]. d3 ]6 M! v
2 L+ O3 B+ g4 U) X8 o4 |
// This is a simple schedule, with only one action that is
) B% G* ~6 b8 H- Q0 A // just repeated every time. See jmousetrap for more
: r- G% ~$ H0 ]& X // complicated schedules.9 w z9 |* j5 c4 T7 p, W* Z
9 I# @0 |* Z- `
modelSchedule = new ScheduleImpl (getZone (), 1);7 X, L4 D6 ?% V( B' n- `
modelSchedule.at$createAction (0, modelActions);
# b$ d8 N3 w5 Y: P
0 u# ^& t; E4 ]9 {( O1 D return this;
/ z1 L% i- h* g1 y: _ } |