HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ j+ C. e% ^' K: h; ]
1 Q# o! f U. {+ a; {5 z h2 g public Object buildActions () {
8 r9 s/ B) ]9 U% P) z ~7 j super.buildActions();
6 |# h1 A; d3 ]0 h
1 B8 h# V: R1 B; l! R( K // Create the list of simulation actions. We put these in
8 E M3 O( U9 g9 ?- ?7 x. y2 s // an action group, because we want these actions to be2 v9 M( o2 h- J1 a6 o; {
// executed in a specific order, but these steps should0 R* u; a" t" J: v6 }# R$ z
// take no (simulated) time. The M(foo) means "The message
5 U/ b' d8 e8 p! F5 J4 g // called <foo>". You can send a message To a particular
/ n$ a( B- p$ [, y7 ?+ a // object, or ForEach object in a collection.
% S6 {! Y6 i0 E! }" e; l1 |6 i ' \( X; T V; |# q5 T: f3 e
// Note we update the heatspace in two phases: first run
7 a' a9 M! a' h2 D% C // diffusion, then run "updateWorld" to actually enact the
; K5 X* G3 l" f3 @0 ^ // changes the heatbugs have made. The ordering here is
2 |# G4 ?; z2 g$ T+ | // significant!
# I1 D0 X( r% _* C( J0 ^
- F9 b; g1 K' e4 d1 N! z/ t" N9 { // Note also, that with the additional
F8 M3 h1 f/ q9 T% B# f7 } // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 k+ {* m$ V' o! [* F // randomize the order in which the bugs actually run
/ q; S; j$ a+ |. G! G7 ?3 @# b( v // their step rule. This has the effect of removing any O/ v/ b9 f- v8 A
// systematic bias in the iteration throught the heatbug
4 f: }) C2 V! l // list from timestep to timestep( {2 l& [ X* }) M4 t5 B
$ n- @' I s( R0 X8 \( u& N# i
// By default, all `createActionForEach' modelActions have
& ~& H" l$ e2 S4 M; S7 Z // a default order of `Sequential', which means that the* Y2 _& i- ?! `3 j& P% N% X& K
// order of iteration through the `heatbugList' will be
* N) o! ?/ Y0 c% [ ]; R/ N // identical (assuming the list order is not changed" V0 b6 h5 b7 j6 Q+ @9 J
// indirectly by some other process).
* n; `0 G' ]" z$ m3 R* s# `
! n$ ~: o/ k7 a( m' t modelActions = new ActionGroupImpl (getZone ());
! b( I. C g6 H6 y% x0 [8 b* R1 q& F$ `8 R
try {
2 [* @4 o: Z! N+ o modelActions.createActionTo$message8 }) t( ]' b1 y: B9 |: F
(heat, new Selector (heat.getClass (), "stepRule", false));
0 T: ]9 X+ _" z1 T: c } catch (Exception e) {
% D/ Y, v1 q+ y System.err.println ("Exception stepRule: " + e.getMessage ());. J% H( \6 p4 M
}0 ?) [7 F9 t! i9 d3 S6 U
" j0 u) w# q5 T7 ]5 [8 T7 U1 ]( P try {
% t# m7 ?- Z! L, I4 E6 G' y Heatbug proto = (Heatbug) heatbugList.get (0);
* c ~& j0 S6 ]) k5 l& U+ p Selector sel = * q' V9 F. ~8 a5 \: U( _8 \
new Selector (proto.getClass (), "heatbugStep", false);
' k$ C* |- j0 i i actionForEach =
: m, Y0 J/ g5 T3 T0 z modelActions.createFActionForEachHomogeneous$call
7 g2 P) G/ t) y2 {! N0 j (heatbugList,. j" U! k0 z! r# c
new FCallImpl (this, proto, sel,$ `4 T* ?" C) h% `
new FArgumentsImpl (this, sel)));9 m4 V: Q C" L+ B8 l" F0 Z7 f4 i
} catch (Exception e) {
- v) @7 @0 V ~5 I- _# q e.printStackTrace (System.err);! x- v* X6 i5 x4 [0 f. b: S
}
' `; e- g8 p8 k, T7 [ f$ I) t
+ M7 |+ [5 Y. p1 m6 ? syncUpdateOrder ();$ B P# |8 U/ l' x! A+ [. U
) _% G2 q+ o* t0 R9 o' L. r try {" O& G" ?3 l0 e" b' b
modelActions.createActionTo$message # c: `( ~& H; K$ n2 l. h2 D
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 ^( x3 V' [6 X3 n' f } catch (Exception e) {
' B0 q9 w0 f( Y* ~5 [ System.err.println("Exception updateLattice: " + e.getMessage ());
8 A4 H: _# H' g% `- G) L% D9 v }
' b* e# x5 X1 j( e; Q/ n8 V 7 [( H* A# ?6 @# H. y6 f4 _
// Then we create a schedule that executes the
8 v3 Y0 _' a4 b( k5 Z // modelActions. modelActions is an ActionGroup, by itself it* w5 k$ i0 x( m
// has no notion of time. In order to have it executed in" c$ W3 j! j. t1 _
// time, we create a Schedule that says to use the
3 A+ l* D/ i' _ // modelActions ActionGroup at particular times. This
' c% |; ?; X$ h' X% O. q // schedule has a repeat interval of 1, it will loop every
' x- I! b, p9 `# q. J // time step. The action is executed at time 0 relative to! ?+ F' ]0 b# M; `2 H# H
// the beginning of the loop.
1 _' h$ n) o K1 Z, v& V5 v
2 u _% R% J) p5 K // This is a simple schedule, with only one action that is! _1 e# Q+ @9 a( n- z. p/ S$ o" P
// just repeated every time. See jmousetrap for more# H* h9 H4 x. _0 H2 o1 O8 b$ A
// complicated schedules.- c3 `! q$ Z2 e0 _$ g+ x
: K5 f8 G' H" }& `+ w* ` modelSchedule = new ScheduleImpl (getZone (), 1);6 {. A: }3 E- c& Z' U/ z
modelSchedule.at$createAction (0, modelActions);1 C/ ]4 p$ |" W7 o9 y
& B4 n- `1 K. [- h. n: a return this;
0 l5 L' z* M( h7 j# E } |