HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. }9 m7 l2 g: \4 H" w
& ~( H" Q4 s0 c! o public Object buildActions () {1 n- ~7 b% Q9 p
super.buildActions();' Q* P1 P. k4 g; @/ j6 P
3 _: K( P8 O* w3 p) A0 o // Create the list of simulation actions. We put these in
. e# `' C/ E; L, J8 b; m% j# { // an action group, because we want these actions to be
# [0 w: w) l3 N7 j/ \' Y# s+ R // executed in a specific order, but these steps should
$ h2 h4 G8 p4 ~2 Y5 }, q1 _ // take no (simulated) time. The M(foo) means "The message
; q2 T$ T8 ?; J' s* S: V // called <foo>". You can send a message To a particular
' L% ~* y8 B3 a! Z; i // object, or ForEach object in a collection.& b( P( `& g$ v
; B3 {6 g: {" ^: G' D$ C2 } // Note we update the heatspace in two phases: first run
0 C4 @) e* h8 d2 Y& r6 \, V // diffusion, then run "updateWorld" to actually enact the+ g- C, ]+ V }3 x& m2 j3 Z% D
// changes the heatbugs have made. The ordering here is0 a; K/ @1 v* e, E: x$ P
// significant!5 n* g3 O/ C& e" V+ W7 t$ f
: u* i' @' l: ?' v+ p. A: A- Z // Note also, that with the additional7 L1 r8 ^! K" N3 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 c1 M) R' B/ A% i
// randomize the order in which the bugs actually run
2 k1 F; Q1 [8 S3 i! t1 Q: x // their step rule. This has the effect of removing any
$ i ?8 A' T; S) O) m* M' j // systematic bias in the iteration throught the heatbug* H+ m( b7 y! i% ]
// list from timestep to timestep6 A$ Q, i2 H# R5 A* y5 W1 V: _: r
& |- n6 m6 Z6 o. Z9 E2 _, g' j
// By default, all `createActionForEach' modelActions have* D) I/ W- v' {/ S" Q5 Y x
// a default order of `Sequential', which means that the4 _% c+ G* G' s& q& d
// order of iteration through the `heatbugList' will be
1 L& |% {: R. e0 C6 `* h7 |1 ^! i V // identical (assuming the list order is not changed
- A0 x% a% X4 ]( w3 @& L // indirectly by some other process)./ Q h- y/ Z% O- Z( _7 f' G
! C0 t- i1 q- b5 n$ l: P5 o" |: X modelActions = new ActionGroupImpl (getZone ());. s+ g' O3 k6 i2 c4 f7 k& {6 ?
9 J- W1 M8 l! U1 C3 E2 S/ I4 u6 j! ]+ i
try {
( z& h) V5 {4 |! _1 I9 N# w modelActions.createActionTo$message
# f- r) k c3 X5 e (heat, new Selector (heat.getClass (), "stepRule", false));& Y2 W: q) x0 A( v$ N4 K
} catch (Exception e) {4 N$ Y6 N- b- l3 v ]( `8 E
System.err.println ("Exception stepRule: " + e.getMessage ());
$ k( F2 l5 J7 b+ ?- r9 @5 N* g! j6 U }2 _' D4 I4 t' [2 j3 k/ X. e% X
; V. A) a' E/ _/ @; ?
try {
; j9 t6 o6 T- s ~2 ~ Heatbug proto = (Heatbug) heatbugList.get (0);
9 C" m! S" U7 [/ H1 O Selector sel =
' k: B/ ]( {2 o5 G, d new Selector (proto.getClass (), "heatbugStep", false);
: r, f$ A9 r" H, X0 x actionForEach =; F H3 P) k h
modelActions.createFActionForEachHomogeneous$call1 m% t9 R: |, A& B1 `+ x" k4 Z& g
(heatbugList,
7 n' H( k5 m0 |: T& o$ O: Y! p new FCallImpl (this, proto, sel,
0 j2 K1 r6 K+ V) |( W/ o9 Z7 y0 U new FArgumentsImpl (this, sel)));
! d l: ]) b f9 C- {: F6 m } catch (Exception e) {
, O5 X; }6 X- ?( j8 s/ U e.printStackTrace (System.err);
2 a1 ^! K& ^: e1 O# B, @8 A }, L: A) e& b$ ~! i3 e. x5 B
9 }* N2 T6 D) r1 l4 d; D7 k syncUpdateOrder ();* n- | J+ J$ D
/ K6 S- F& f* S. l* S3 L
try {
' h' ]# B& E) Q! m8 F. J5 o# L4 i2 \ modelActions.createActionTo$message 3 a; q' `9 D7 q# u
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 o0 g' C# K: n8 h } catch (Exception e) {
4 f" Y) e; t' k System.err.println("Exception updateLattice: " + e.getMessage ());) _. i! r' L' M5 s$ f
}
7 H) ~; r4 P6 G% b' g; Y
/ G0 c% s: ~& z: h, u# O // Then we create a schedule that executes the
6 n9 F4 I; p( i8 W+ u, l4 [ // modelActions. modelActions is an ActionGroup, by itself it
8 }/ K j! e9 ]" [ // has no notion of time. In order to have it executed in
7 e% x+ Q5 R" U. s. k Q; B // time, we create a Schedule that says to use the- q* k9 n1 f$ s
// modelActions ActionGroup at particular times. This
( Z; }4 w/ K' d: t5 U0 D8 h/ [% | // schedule has a repeat interval of 1, it will loop every& D7 q# z' o! N, J h7 f
// time step. The action is executed at time 0 relative to
0 u7 y! k. `0 ] F! |4 n/ k. q // the beginning of the loop.
& [; `$ T' i' f: S& a* V3 G9 F% N/ N6 D& a ]- ]$ {9 P; [6 ]+ `
// This is a simple schedule, with only one action that is# A$ m' o. ]( q
// just repeated every time. See jmousetrap for more5 ^ b. G. _( i/ h2 X
// complicated schedules.
/ M c' Q# v! P3 K) D# [
% L Z) p6 E% g. G modelSchedule = new ScheduleImpl (getZone (), 1);
& a X1 O7 D* V$ v& K7 {% _& a modelSchedule.at$createAction (0, modelActions);( ~7 W' H' S: W" P9 {; j8 v
( K$ N* c7 G2 ]9 t: P- b
return this;4 _9 T3 Y- O( Q, V5 |8 }9 y
} |