HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 G' ~5 F6 _# S# m0 L6 P) {1 M& z" d. u& t
public Object buildActions () {
2 m, J, N" o7 P) p: V' n super.buildActions();
# w0 H5 F/ c7 } ! D& l3 ^7 `2 R5 K$ a" f
// Create the list of simulation actions. We put these in5 R% p1 r8 d* R
// an action group, because we want these actions to be, H! t# M: J9 }
// executed in a specific order, but these steps should
( l. w8 Q! g9 O) J // take no (simulated) time. The M(foo) means "The message
( B& i* g( w+ b- R // called <foo>". You can send a message To a particular
, m; \6 h( K* ~5 F3 {# _# ^3 V% w // object, or ForEach object in a collection.
% _/ H% F ?$ s' v! R* O7 @ + C" ]$ }+ E1 c# `4 }
// Note we update the heatspace in two phases: first run' V& P5 S* I$ P! B6 Q6 q
// diffusion, then run "updateWorld" to actually enact the* _; F" \' S! D2 m, j* G
// changes the heatbugs have made. The ordering here is- }$ u7 z) d' G; }
// significant!
3 b6 ~2 B V$ {% C! \% k
9 v" @& O- v; b! p9 |' K // Note also, that with the additional+ A/ |. l4 g- X$ R; |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
* B$ |0 W" I2 z* G# U, C: B7 I, W! q // randomize the order in which the bugs actually run
# Z$ O& Z% ^4 t1 n z // their step rule. This has the effect of removing any
% B7 V$ H* Z) L! d; P; w! | // systematic bias in the iteration throught the heatbug& T+ `& p& R0 v' A* a; |
// list from timestep to timestep p9 }; e$ |! F) k% L& Z8 Z
( i+ v8 w+ \) j1 Z$ Z* L) E2 X
// By default, all `createActionForEach' modelActions have6 a' c! A) m6 {1 X2 T6 B# }* a
// a default order of `Sequential', which means that the6 ]; d! Q' x" c+ T \; U: O) s
// order of iteration through the `heatbugList' will be
) M; v* [+ z# R0 A: d // identical (assuming the list order is not changed" e( }5 P, I/ n. z; r% r
// indirectly by some other process).
. j c- ^& m: ^3 a $ I4 W1 o! t( e m P) d5 X
modelActions = new ActionGroupImpl (getZone ());# u9 j+ c* z2 `( T
; }6 @9 `3 |6 D0 J1 F- O try {
+ U& j& ]* Q! U1 U" d7 F; E modelActions.createActionTo$message) E8 ^# ~" y s
(heat, new Selector (heat.getClass (), "stepRule", false));- L% C9 A* O7 j+ Y: z* Y/ e
} catch (Exception e) {
9 }3 l6 U' p' m* p System.err.println ("Exception stepRule: " + e.getMessage ());9 s9 w3 H1 B5 L/ b: ]
}' I+ j" o" d: K" D* i/ k( P: w
3 @) Q5 A* b$ X2 [% a
try {
6 ], X2 x# k, g3 w7 v2 I Heatbug proto = (Heatbug) heatbugList.get (0);
$ A9 O, D) W/ A: [5 e9 h7 _ Selector sel =
: Z8 y2 r& n$ s! Q8 { new Selector (proto.getClass (), "heatbugStep", false);: b& f+ s) j' ^3 o& P' z! }
actionForEach =
- {8 T6 m: q9 f/ T0 Y, [6 I! S2 s modelActions.createFActionForEachHomogeneous$call
/ D. Q" M5 G3 @4 ~4 K (heatbugList,: Q1 A; s9 q& e5 F& z
new FCallImpl (this, proto, sel,( O* v* t! _: q u; U& M. W6 c
new FArgumentsImpl (this, sel)));' }" Q, X; |/ P
} catch (Exception e) {
( l8 o V; r8 P: S, @/ S% o e.printStackTrace (System.err);6 T% F8 g2 w6 {# S
}2 T( A, N0 K* g. B8 `" W9 _0 S+ I
0 s* P! W% G: i0 U W$ ^
syncUpdateOrder ();
7 Z' M6 c+ y* j% [) I q7 @1 e1 ]. e3 }+ I+ [( D) Q
try {
$ l+ G9 l" e9 { q, j modelActions.createActionTo$message
. G( e: `% G7 K (heat, new Selector (heat.getClass (), "updateLattice", false));
: ~$ \, R/ V% j1 a } catch (Exception e) {3 E% ^8 D/ g2 M
System.err.println("Exception updateLattice: " + e.getMessage ());
7 r1 M' E3 {6 o) _ h( M }! a/ p! V; k4 x& N4 \ ]
: f+ P! C% `1 v // Then we create a schedule that executes the
* l$ o( l1 s% k6 ~: P // modelActions. modelActions is an ActionGroup, by itself it* {2 H( _( G; t
// has no notion of time. In order to have it executed in
( c5 w% A% d7 `5 O: x: j# Q // time, we create a Schedule that says to use the
: n" D8 b3 m! w( N# ~ // modelActions ActionGroup at particular times. This+ G' [( L6 |. v
// schedule has a repeat interval of 1, it will loop every
( O5 D7 }( `4 y. L. q. ^# I, |5 f/ x // time step. The action is executed at time 0 relative to5 D* h v3 s9 e! M# _- C
// the beginning of the loop./ \# P' B8 ^0 X
& q/ k! D/ [* y8 i a // This is a simple schedule, with only one action that is8 V# t, r9 T' T" T) z& L, U3 w
// just repeated every time. See jmousetrap for more
|& I! q/ H; H7 m ~ // complicated schedules.
0 L# x6 y0 c- [ B
. W6 D1 K: t; K4 C$ o% a modelSchedule = new ScheduleImpl (getZone (), 1);
9 I4 n% e, F( U5 ` modelSchedule.at$createAction (0, modelActions);
+ p! Q# h8 C2 n% n: ^. {
* `0 i9 J" ~1 A* z8 v return this;/ ^ T6 s& v; E. J/ H9 S) A
} |