HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 K' ^4 P2 h8 z
; H" \* P1 k5 ~, M public Object buildActions () {
3 {$ a& v# L5 x. s, J super.buildActions();
/ Y% v6 U( ?4 v+ U ' s% u* ?3 F6 e) V& K L
// Create the list of simulation actions. We put these in
* n0 f( x; K; S. T# f // an action group, because we want these actions to be
3 ^0 H Y8 L; n, i6 \$ ?9 Q // executed in a specific order, but these steps should
8 X+ c$ z' r6 u; t h7 O // take no (simulated) time. The M(foo) means "The message$ s% F6 {2 |1 h9 ^, R
// called <foo>". You can send a message To a particular
8 K2 T+ T( E+ u' d: [ // object, or ForEach object in a collection.3 _& ^4 I# Y, }* d& }$ W( z5 f
& ]2 ]; \% z( Z4 H8 s h5 ^ // Note we update the heatspace in two phases: first run
" e( f# i7 X [3 F9 `: R // diffusion, then run "updateWorld" to actually enact the0 i# H3 \: \% N, c; ~$ d
// changes the heatbugs have made. The ordering here is
, T o0 Z& ?/ y! ~7 h4 R // significant!. z: R( n5 Y6 U2 }
/ a+ z5 v, ^4 g+ Z( U: s! @ // Note also, that with the additional
u+ j' p' h+ I0 N // `randomizeHeatbugUpdateOrder' Boolean flag we can5 C5 f+ N/ v9 g/ ?
// randomize the order in which the bugs actually run# a3 v* K: f7 d2 l" [' r" g
// their step rule. This has the effect of removing any
& V" g4 [2 o/ K/ w/ T4 H* d // systematic bias in the iteration throught the heatbug
8 u+ _( R) a% r( R1 j3 h // list from timestep to timestep
: \7 ~: \ i0 x+ ?3 u ; Y R% f. _; g* d4 Q6 @9 E1 P
// By default, all `createActionForEach' modelActions have
6 s2 E- g/ w7 A: r // a default order of `Sequential', which means that the: ~+ B! _1 v( y q4 \7 }
// order of iteration through the `heatbugList' will be5 W/ o" Z6 P) ~1 c0 O# ~
// identical (assuming the list order is not changed
& Z7 U5 N3 a" G. S! j- ^! P // indirectly by some other process).3 y, D' S" {0 x. C# d6 |4 S
% m T- \. c" [. i) c
modelActions = new ActionGroupImpl (getZone ());
" E" s' R1 l) u' {& b' L/ F3 F* ]% ^2 N+ W$ S: L3 ]9 D
try {
/ H& N" B9 A9 D; h4 I modelActions.createActionTo$message4 ?- s B4 F3 W2 m5 \3 I5 f: w
(heat, new Selector (heat.getClass (), "stepRule", false));
- M. s1 J" L. L( d4 v } catch (Exception e) {
$ P1 s$ S4 l$ d+ @& } System.err.println ("Exception stepRule: " + e.getMessage ());& T8 a8 V1 N; y2 O0 T. I; C
}- Y+ V5 x3 x/ T% v$ C: u
% X, r( {% w$ Y6 V8 w9 @ try {
2 V8 r# j/ A* K1 E) E+ p Heatbug proto = (Heatbug) heatbugList.get (0);# T. z# e0 L4 [9 s0 `
Selector sel =
( b! ]2 L5 w2 H1 U" h! J) C new Selector (proto.getClass (), "heatbugStep", false);
# [- i0 h# M( ]( T1 F" d actionForEach =4 U {8 X( b- N* }! _( \
modelActions.createFActionForEachHomogeneous$call
& v& F1 |0 f0 q9 _4 l6 K; ]0 }* w (heatbugList,
2 |) t6 S" c9 }8 m% {2 o new FCallImpl (this, proto, sel,, ?/ S9 f; E+ D5 ]$ V9 c
new FArgumentsImpl (this, sel)));, `! l) C7 r9 e, ?6 Z, s% h
} catch (Exception e) {
7 a9 d3 L4 P6 @( I ? e.printStackTrace (System.err);
6 |: e9 a D& D' D! ] }7 X7 o9 D0 E9 v/ y* r2 j! t2 \2 s
$ W. G B2 c( y h9 _( _2 K5 J8 C8 K syncUpdateOrder ();
2 c0 x1 J' S9 t4 o4 Q5 R' U7 h. I" n9 U
try {
' @! m; M: |0 Z1 @. X& T modelActions.createActionTo$message
9 i }% a( G% D: q/ Y! ] (heat, new Selector (heat.getClass (), "updateLattice", false));* j0 F3 i* X. m6 D' f
} catch (Exception e) {
1 m* K- a0 S' V8 @ a System.err.println("Exception updateLattice: " + e.getMessage ());. ~& B6 r' o* V; B- k
}
2 I1 O, U( v+ S- z5 o# g" W+ C9 O2 T
, v$ T7 D% a7 V, ^+ Q9 ^+ {# C // Then we create a schedule that executes the
4 ]1 U* ]2 Y9 w; T5 l // modelActions. modelActions is an ActionGroup, by itself it0 p( D- R2 X5 Z) Y
// has no notion of time. In order to have it executed in
) C. b: T! {4 \# y // time, we create a Schedule that says to use the
j% T/ |5 w& z. j k // modelActions ActionGroup at particular times. This
0 M$ ]+ h. x! n9 @* F // schedule has a repeat interval of 1, it will loop every
8 N: D" y* m6 |6 W/ G7 y# e% G! y // time step. The action is executed at time 0 relative to5 y( {9 O8 G" T& q* J/ X
// the beginning of the loop.
# E9 j, ~7 {! n# J! u: w Z$ {2 A8 Z
6 P0 g+ M6 g) J. U // This is a simple schedule, with only one action that is
+ q' e. ?5 e, d( @& a& W8 E) T // just repeated every time. See jmousetrap for more
% j) _) E# I6 n4 p8 |/ I# Z // complicated schedules.4 O, [% x$ q4 |1 f- D% X; d% ^
1 l0 j1 d7 q5 W% T2 N
modelSchedule = new ScheduleImpl (getZone (), 1);
w; K5 y- t7 f: {1 a7 |7 D/ R$ P modelSchedule.at$createAction (0, modelActions);
) T1 i( k }" B* V( p- h ! ]4 \6 n! O$ p0 w+ i1 }
return this;
8 A6 o0 i# Q) N- u. q3 s) G# r } |