HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- D, B: r- `9 ` j2 V8 d8 G
) Z/ h$ J8 q. n; j
public Object buildActions () {1 @) w0 u) A+ l* v& L, ^8 X
super.buildActions();, J3 N# b- N: b7 e9 S
# Z& q! i7 B. P6 P3 x
// Create the list of simulation actions. We put these in4 u5 f2 ?6 k. P: m; v
// an action group, because we want these actions to be
7 A! n$ y* y/ P' Q. Y3 `: r( J // executed in a specific order, but these steps should) O e* k4 Y5 D5 @! y; y, [ d
// take no (simulated) time. The M(foo) means "The message2 c+ X1 Z# G% G: g( A
// called <foo>". You can send a message To a particular- N8 e' R/ `, z! k* j1 I6 s* r- Y1 G
// object, or ForEach object in a collection.
. }' O! _3 D" A/ c 5 ?% w/ \4 `& E% Y3 r( i: \7 \- n
// Note we update the heatspace in two phases: first run8 o& z" F6 ^( E% Q4 w3 p* _8 W. d
// diffusion, then run "updateWorld" to actually enact the
6 W' x$ B3 {" t8 F* X( ^# A // changes the heatbugs have made. The ordering here is
# x; p: `1 n% W# F6 z& u // significant!
4 Q9 m* D3 X1 q [" l- Z ! f+ [1 A. C+ s+ a0 @; D
// Note also, that with the additional' [( f: W2 v# q) S4 o; H8 X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: G+ M1 Q9 y$ S% C3 V$ r3 D // randomize the order in which the bugs actually run
# {$ Y6 D% R' r! d! O2 P. W // their step rule. This has the effect of removing any
: ?6 e7 Z3 F. d- e/ h // systematic bias in the iteration throught the heatbug$ U& n" s5 i: y0 \$ ^& m$ i
// list from timestep to timestep' d* o1 O h) x& n" ` k B$ H
. Q5 V% W. T) E) z4 C/ Y // By default, all `createActionForEach' modelActions have- e" S8 k5 a) c5 p
// a default order of `Sequential', which means that the0 b. c+ W) v4 C, S! _/ N
// order of iteration through the `heatbugList' will be9 C. e+ F3 e2 i& a' J: [" e
// identical (assuming the list order is not changed3 [; q6 ^ T5 l
// indirectly by some other process).
- v; D* ~( F/ d 0 _5 f" w2 A f, |5 l
modelActions = new ActionGroupImpl (getZone ());
, ~' v% p8 G ^! V, e% U0 n+ ^8 J" T' S% ]0 G
try {
}+ ]7 ^9 I0 ^, k/ z/ w: i4 `7 M1 J modelActions.createActionTo$message' i9 j: J/ k, R
(heat, new Selector (heat.getClass (), "stepRule", false));
4 a$ F8 t7 ?# {. u& } ~. v J } catch (Exception e) {
( J5 S4 ~7 v2 N! L. j System.err.println ("Exception stepRule: " + e.getMessage ());2 \# n& I' `2 d% N; k- h+ C
}3 u, i# S5 b6 y$ |
x$ c7 F1 U( M! y
try {: a, Y- `; K, U: _3 \0 ?
Heatbug proto = (Heatbug) heatbugList.get (0);4 p7 Z; T, h0 g+ n4 l4 ]7 B: L& E, ^4 d$ x
Selector sel = / j6 {9 a7 P5 j0 f
new Selector (proto.getClass (), "heatbugStep", false);; ]# f. U$ d* E
actionForEach =
" Q' Y# F" O3 U7 b+ j( l8 f3 b modelActions.createFActionForEachHomogeneous$call
1 T) s9 e: A3 y* D/ Q# E. _ (heatbugList,
: u! S1 Y# A3 U! T8 }4 x new FCallImpl (this, proto, sel,
2 @; ]" b. [9 n: Z' o new FArgumentsImpl (this, sel)));
$ _. U7 ?% L; I% M3 u" x; `: ^ } catch (Exception e) {' @1 f" ]1 Z+ i- s# m9 V4 o+ a/ d
e.printStackTrace (System.err);( P8 N, r- n% V
}
6 H; ^# ^7 J* g$ B* S N3 |" {7 d4 W$ d C
syncUpdateOrder ();/ e- ~- M+ s' @9 L b# ~( | `* T
# f* e& W9 P0 W8 i try {# S9 {8 b. e1 V7 P% ?5 m
modelActions.createActionTo$message
, u" J) u4 M. t" }% ?8 T" \/ @& j (heat, new Selector (heat.getClass (), "updateLattice", false));3 x8 F p& G# j# f; a3 ]1 _+ E4 f) L
} catch (Exception e) {
" }, _5 y! |! I3 z1 ?, E3 H: | System.err.println("Exception updateLattice: " + e.getMessage ());6 @& J( H9 U1 q+ _: p) x4 P$ n
}
) P! Z( D2 B- Y* r
% }% k a i) F- i // Then we create a schedule that executes the# f( I" t4 [3 D+ q. B4 V% s+ E
// modelActions. modelActions is an ActionGroup, by itself it6 j$ y8 F8 W2 f, C) S I
// has no notion of time. In order to have it executed in
3 ^. ?# z. _, t8 A) t // time, we create a Schedule that says to use the
9 A v3 @( u; n9 L+ Q6 W // modelActions ActionGroup at particular times. This% g2 S0 `* h9 ?( O
// schedule has a repeat interval of 1, it will loop every
: v, j S$ k& C% R* O // time step. The action is executed at time 0 relative to
* X: t; a5 w1 Q: W6 _ // the beginning of the loop.
* s. w5 R% o& x& Q- ]& F3 N3 B/ h/ s* G9 L
// This is a simple schedule, with only one action that is" m- f9 {8 ~6 B5 \' }
// just repeated every time. See jmousetrap for more
5 H& @/ P0 i$ K& C, f/ P // complicated schedules.
. w8 U" K% A. |& \, w. B7 P $ Z6 [- Y D% K9 L- l; `$ F
modelSchedule = new ScheduleImpl (getZone (), 1);
' ^6 [ X, ^1 m& J( B* i3 q+ o modelSchedule.at$createAction (0, modelActions);+ W y1 m) s7 N; g) c. M6 H$ k2 O
$ Y, p/ d! V- _5 {1 ]
return this;
2 r; H2 X" L2 h) P) [7 U2 Q } |