HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! J( k% `7 ]; T. }: \
w" \2 i. v5 S- u$ \5 J
public Object buildActions () {
2 x2 f2 O/ `5 v9 t6 }1 ~9 a super.buildActions();7 ~7 i5 ~$ t3 F
- m6 y5 F" _. a9 s4 S // Create the list of simulation actions. We put these in1 G. a1 h. }& q" G4 k
// an action group, because we want these actions to be) ?9 m" ?1 _: E. {) ]4 H
// executed in a specific order, but these steps should
& H3 i, X! b% o1 T4 g# N // take no (simulated) time. The M(foo) means "The message0 J' r, Z! T, M V v
// called <foo>". You can send a message To a particular, e" K$ L: o$ Z! Q: t& r
// object, or ForEach object in a collection.
# U7 n9 G8 o; X% B + h, y) L9 K) G* U/ c) |* z
// Note we update the heatspace in two phases: first run
; p; T" N! }# i/ F // diffusion, then run "updateWorld" to actually enact the/ {3 L0 q& N& @! F, ]9 a8 s
// changes the heatbugs have made. The ordering here is
S/ {! o/ O3 D# S1 f5 M // significant!
9 |) k' J( t9 d8 h: L0 j8 x. R0 w ( k$ D( w( H& b! O( O
// Note also, that with the additional
3 j" \2 k4 s6 w4 e) ~2 g: B // `randomizeHeatbugUpdateOrder' Boolean flag we can$ ]: v, W# |1 [2 W; {
// randomize the order in which the bugs actually run I9 Y6 g2 D! Z a( _2 m0 V
// their step rule. This has the effect of removing any
! I' ~( E! R2 }. v5 \5 H5 c$ q // systematic bias in the iteration throught the heatbug
1 H' n$ h* V" N/ T- I: d' ~ // list from timestep to timestep2 D! N- j: i6 L1 s( }0 n
! u5 T. f" ^% v6 t$ B, X' y
// By default, all `createActionForEach' modelActions have( F) G# p/ r1 R4 F9 B) O6 e
// a default order of `Sequential', which means that the
8 X. K/ i0 B" l9 Z% o5 F* G+ A: q // order of iteration through the `heatbugList' will be
1 A7 P! S. O& u* V6 `1 K% H // identical (assuming the list order is not changed' G4 d5 _$ J) Q' x# i' p
// indirectly by some other process).7 G0 I( t6 B9 t
a" u: r6 z9 \
modelActions = new ActionGroupImpl (getZone ());
" _+ c6 o6 b8 I" E( O2 C$ t/ U
1 R5 N) `. f: | try {( G4 s: S1 t* i3 g# n: K9 Q: n
modelActions.createActionTo$message
" Y2 c+ O Y# G5 |5 J. [ (heat, new Selector (heat.getClass (), "stepRule", false));4 ?6 D0 X2 L5 R1 d7 r' o. R" J
} catch (Exception e) {
$ A4 \& w3 O8 n$ s System.err.println ("Exception stepRule: " + e.getMessage ());
$ }$ J, @, O& V& w! D }/ X* c: d- |' Q" T$ r8 ^1 b
( E n6 J7 R1 J2 Z5 T, @# w7 ]- ?$ n
try {9 v9 T8 w0 G' g- q9 ?! ?
Heatbug proto = (Heatbug) heatbugList.get (0);
/ n/ O! W- y# r; ?1 S$ ~ Selector sel =
o# ]& X5 [; f new Selector (proto.getClass (), "heatbugStep", false);
% U- z/ J' i1 d' n( X2 j5 n) h actionForEach =
& `( q# R" n2 f7 | modelActions.createFActionForEachHomogeneous$call
3 M/ \2 P4 q, \& M. M (heatbugList,& H, _* P: s9 V) S+ q
new FCallImpl (this, proto, sel,6 @/ P! H; i( |! v' N4 X, c( B
new FArgumentsImpl (this, sel)));/ K* _( g+ ^; Q# G: s, F2 o- P
} catch (Exception e) {
/ \; p$ S( L& A4 P. Q$ e, J e.printStackTrace (System.err);$ M; [/ ~0 |6 i. r9 E
}
" C5 h/ O! ^4 u j" p( ]8 f# ^% j5 }
syncUpdateOrder ();
2 j# I. a! R. Y2 i% u7 Q+ C7 I
( s9 i# b" N; l+ [$ O2 k7 ` try {7 \" E* j2 G, l, J2 }. {4 ], M
modelActions.createActionTo$message & @1 `- V# {/ [ Y
(heat, new Selector (heat.getClass (), "updateLattice", false));
* f8 y+ j, p ~+ U2 U& Z$ N } catch (Exception e) {* R$ P' t( s8 M* o
System.err.println("Exception updateLattice: " + e.getMessage ());3 Q% O4 p! o# e0 a, j' c
}
4 D) w3 ]0 ~5 k. ~+ q, y6 f- Z) k
/ o: @( u: O9 k5 p F4 k // Then we create a schedule that executes the$ v( H4 z$ P& ?2 Q1 h5 p8 J& {
// modelActions. modelActions is an ActionGroup, by itself it. Y& n2 \+ z' F# Y
// has no notion of time. In order to have it executed in
! {6 n" s, O2 L' b- s8 G' w8 P! v4 C // time, we create a Schedule that says to use the. f3 Y$ x8 V: G# E0 S$ S9 C- ?
// modelActions ActionGroup at particular times. This
- F3 T. Y7 Q2 L7 y // schedule has a repeat interval of 1, it will loop every
- U2 j$ D$ ]( R# a( q/ d // time step. The action is executed at time 0 relative to% ]5 X! [1 p) W K( v9 `
// the beginning of the loop.7 t* u5 O7 ?$ z) ~' |
+ W" ]! g" N* M# ]+ M4 x // This is a simple schedule, with only one action that is! _1 F. ~& ~# w
// just repeated every time. See jmousetrap for more
4 G# v0 u6 @8 p+ S. ] // complicated schedules.
4 X5 K- C# }% K2 a9 l: w3 H: t* M
: G& w( G, e [+ ~) l modelSchedule = new ScheduleImpl (getZone (), 1);
. b& B$ j7 N4 { modelSchedule.at$createAction (0, modelActions);0 L9 Z2 e: B! u5 J& [! @; d
7 R% N" S. @, m; l5 v2 A
return this;$ ?% f! S) q: V# g z; |# B, [
} |