HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 N/ A8 v6 r$ E t' t" ?( N: Y6 y
8 ?3 I% F1 P: D3 e public Object buildActions () {
: M& C. N$ ^5 Y* K! j! |) l super.buildActions();
1 U7 ?# U( h+ L& ^# {- f $ @5 J& O- z' _! z
// Create the list of simulation actions. We put these in2 c; s: Q- f2 U5 W8 _: ]0 W8 _
// an action group, because we want these actions to be
9 W) {# `: x5 y // executed in a specific order, but these steps should
! _3 S/ |3 r. I // take no (simulated) time. The M(foo) means "The message2 X# _7 B+ y5 m( g9 ^6 j
// called <foo>". You can send a message To a particular
, g" \( Z/ b# X e* r( r5 E4 l // object, or ForEach object in a collection.
/ G8 ~7 ?4 u2 W7 e6 c" X5 v5 b * e9 @3 K2 T2 P) t4 U2 r
// Note we update the heatspace in two phases: first run
2 I& }1 ^; ?; x) F- P+ |. O // diffusion, then run "updateWorld" to actually enact the& K+ }/ z1 \6 K/ P' }4 o8 z$ \
// changes the heatbugs have made. The ordering here is
6 q3 ~; z3 {8 H4 \( H/ { // significant!
% ]. P' {* A6 j/ H
j( l1 v K8 V* d. U. k- y // Note also, that with the additional# F* ?, y4 c1 f- [4 W# z5 `) M
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ e5 \+ U H$ I1 j+ I0 C1 a
// randomize the order in which the bugs actually run
( c2 d q E/ o0 r // their step rule. This has the effect of removing any
, H. S: r# S, H: a% o B4 I @ // systematic bias in the iteration throught the heatbug
$ D9 o! T; P0 m" Z- @( R+ a // list from timestep to timestep
0 e; ], i$ |0 I$ r9 _" u* [
9 P( i! I! B& C8 s% i" e4 q( T // By default, all `createActionForEach' modelActions have
6 m V Z8 b6 b3 z) | D+ G7 \ // a default order of `Sequential', which means that the2 a6 I2 D4 S0 C. |' U
// order of iteration through the `heatbugList' will be) Q9 E2 F% y' A |2 n q ?" H
// identical (assuming the list order is not changed
4 r4 i8 n- W1 ^ O4 m6 ` // indirectly by some other process).
- \4 x& q9 M. X1 s6 H' R
) b# c0 K) Z0 d! Q modelActions = new ActionGroupImpl (getZone ());8 ?( t, b% g- H, o+ m
- J, L; H3 e7 X. O& b# O9 { try {
5 x/ Z, o5 F& x3 P6 y' E4 {: P modelActions.createActionTo$message/ j ~9 L# P7 |6 M; ?
(heat, new Selector (heat.getClass (), "stepRule", false));
/ l% O+ O) g9 n3 X" @) Z0 o } catch (Exception e) {% o8 |! [( |) M g
System.err.println ("Exception stepRule: " + e.getMessage ());- ]) y# c" L6 J0 x# K; e
}5 C) n; e+ ]$ P6 a
' Z3 x: V% j" h3 e try {, O. u; B. `- u+ g
Heatbug proto = (Heatbug) heatbugList.get (0);' Q/ k$ j! Z8 Y) I
Selector sel =
9 r$ u; K+ q2 ` new Selector (proto.getClass (), "heatbugStep", false);8 e/ Q9 k) [" L; j& q' e& a
actionForEach =
" N5 K/ ~( [) g a- j: I j modelActions.createFActionForEachHomogeneous$call, F$ ^8 S( A& j% V6 p, T+ \
(heatbugList,
5 L6 ^) [1 m& j& u2 c! n' Y new FCallImpl (this, proto, sel,
5 E; x( d/ P! V; \3 U9 d+ s new FArgumentsImpl (this, sel))); M! H+ V, b8 [+ h
} catch (Exception e) {+ |: k! ]1 ^' ^- e5 @
e.printStackTrace (System.err);
@7 R7 X# ?9 J6 F) Q, g }$ L/ { C/ K8 e9 z) q
7 F" g% ^. x3 Q, J! p/ S syncUpdateOrder ();
. X& b6 c" E- X' K* j7 d1 _0 G" g- M, V" S7 `
try {8 E( W8 [6 p; g v o2 l
modelActions.createActionTo$message
1 B+ Q W1 |! H! j/ V4 \. b (heat, new Selector (heat.getClass (), "updateLattice", false));
3 ~, q6 F Y$ ? } catch (Exception e) {3 H$ p* t, q7 ?/ D! B6 x/ ~
System.err.println("Exception updateLattice: " + e.getMessage ());1 A: J [- W9 v4 V# f" u
}
( n: l) R' X5 h& z9 e- a
+ [6 E8 B& t- W // Then we create a schedule that executes the
8 R9 D. @% i- d1 ^& V6 ^, V: @ // modelActions. modelActions is an ActionGroup, by itself it
& k- W& [: C) n$ _- }' \0 i* j // has no notion of time. In order to have it executed in
- S# b6 z' x2 _; T% W+ z // time, we create a Schedule that says to use the
" C/ g) G$ |6 ^) E7 d, U // modelActions ActionGroup at particular times. This2 w; j0 E' y- l. p
// schedule has a repeat interval of 1, it will loop every
5 \$ Q. N) P; H U ?' N9 a // time step. The action is executed at time 0 relative to6 R5 K$ y: f1 d2 X& ?. Y3 ~, U! y
// the beginning of the loop.) @' o9 L6 v9 k. q
% j" t0 H0 s: K6 B0 _1 b
// This is a simple schedule, with only one action that is; |. U$ P- T1 n5 V6 Y
// just repeated every time. See jmousetrap for more
1 h' z3 O e8 x // complicated schedules.5 H' G0 W/ l3 a* m$ ]
3 H% i9 G0 N: q% E' e. y" i. X7 m modelSchedule = new ScheduleImpl (getZone (), 1);0 J& j0 U& o% s# x. m: ?1 b
modelSchedule.at$createAction (0, modelActions);
% f# x B+ D4 h7 h% K+ b
4 C* Z' C. X. ~0 x' f O# i, a return this;
( l6 q F- A; a' ?/ o } |