HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 {2 g- r" g2 s! A) E j. c0 u) P, C
public Object buildActions () {
j$ [+ M0 }, S- K& U super.buildActions();
8 T- R6 b% N' H2 a
$ J$ a/ C" T: `# q6 C4 ^/ W // Create the list of simulation actions. We put these in! B, y) p! T J6 E3 n, R: P
// an action group, because we want these actions to be ?" B0 f& l. E! u* i# f
// executed in a specific order, but these steps should7 |( U# J. b2 v4 O% q# t7 _+ ~
// take no (simulated) time. The M(foo) means "The message
: ^6 r" k9 U% z2 Q' [ // called <foo>". You can send a message To a particular! P1 M3 H8 u* K4 u+ e1 S
// object, or ForEach object in a collection.
0 K3 f: K# U% a$ M2 q9 B6 p0 o4 s , ~; j/ o9 h+ f( s# S& S" V
// Note we update the heatspace in two phases: first run
& v, @' s: D2 ^, Y. }* o- K+ E // diffusion, then run "updateWorld" to actually enact the& f. X% p, e% Q+ h; D& \
// changes the heatbugs have made. The ordering here is' E1 G& r& ~ ~2 K) V- D
// significant!8 h4 T! R; V7 d1 g
0 Q6 q6 N0 U: m, t! W. T0 m
// Note also, that with the additional/ u- d6 e1 W( T# Z3 B5 _3 `; F
// `randomizeHeatbugUpdateOrder' Boolean flag we can# F) X- Y+ t6 E; B* ^2 V) B
// randomize the order in which the bugs actually run0 }9 T4 H' y0 k1 B( u1 x) e
// their step rule. This has the effect of removing any. ]9 ~# K; V2 X; p/ t! ?: T: [5 m8 [
// systematic bias in the iteration throught the heatbug
$ U& V4 T2 ?, h // list from timestep to timestep: Q) r, P" s$ T$ }
# s. @, }1 Y0 v7 @# r7 h9 Q* }) w8 y( u
// By default, all `createActionForEach' modelActions have
: v% s, H8 L* N1 w1 Z // a default order of `Sequential', which means that the
9 O7 Z" ^/ C0 g X% B: ? ~. i2 x // order of iteration through the `heatbugList' will be
/ _" o- `' U6 x2 A' @( r; ? // identical (assuming the list order is not changed* P, T7 ?$ x: p; ]8 I/ j4 m# X, W
// indirectly by some other process).
. `) h$ ~. ?4 s
5 W4 j3 d$ P2 j. P G$ z, d modelActions = new ActionGroupImpl (getZone ());
8 \4 `' y! ~7 @& C+ R4 k& T) J/ Y# q! H/ W
try {8 W1 d2 t! U5 w; c0 F
modelActions.createActionTo$message! l/ s/ M2 O4 E/ l
(heat, new Selector (heat.getClass (), "stepRule", false));
% Y: j: |6 C% V+ X+ t/ O7 @ } catch (Exception e) {7 y( u; A Z- r. D/ v% {* @
System.err.println ("Exception stepRule: " + e.getMessage ());" C+ h+ X* S/ k+ S/ M' ~* P
}
9 U% P! m3 j$ ]6 o9 V* t$ m& e& K! R2 ~& Z
try {
; Z! R; V* b1 l$ n Heatbug proto = (Heatbug) heatbugList.get (0);1 o0 l8 s! Y% x+ t& J( a3 ?" j1 [
Selector sel =
* Q: H" n5 }8 m: e- a, r2 J3 r new Selector (proto.getClass (), "heatbugStep", false);( K. b; F1 o- ~+ F9 u4 x* k; A
actionForEach =
* @. k9 U# Y9 E" V modelActions.createFActionForEachHomogeneous$call
) R" @' w/ l& P8 { (heatbugList,
" ~+ x8 ]& S$ r& Z* V, Y new FCallImpl (this, proto, sel,, y. h4 t `$ r# g/ h, m2 i5 w
new FArgumentsImpl (this, sel)));
9 c1 [ F: p; Q' B } catch (Exception e) {* h6 _5 j4 s+ n5 \8 m
e.printStackTrace (System.err);
( [" n9 H, ?; u; E( E; \ }
; _4 _( E4 h9 Q" \8 d9 L 6 ?2 P7 m: {) m `! X( A
syncUpdateOrder ();
, h+ U* B, a2 O6 S" v0 f' ~, l3 R8 Y5 O% \( w
try {
% D, \: c p* Q6 \8 n5 z' [ modelActions.createActionTo$message
: G4 r* K; {+ L$ ?. `/ b (heat, new Selector (heat.getClass (), "updateLattice", false));
2 _# \) a; u6 M3 _3 E) A% L+ T6 B: _ } catch (Exception e) {& t' c, u. O4 A6 e+ G6 D+ ` m
System.err.println("Exception updateLattice: " + e.getMessage ());
) J& ]: F1 x2 [ }
) P' S9 ?6 R3 A# [! s 5 q' v, U: T% b, N2 Q& g! R
// Then we create a schedule that executes the
( L6 u! z5 S' j // modelActions. modelActions is an ActionGroup, by itself it6 R% d, o8 |. z9 _
// has no notion of time. In order to have it executed in
5 N" j- Z# ]6 s: S; L( S$ S // time, we create a Schedule that says to use the
V" m- C* n& n // modelActions ActionGroup at particular times. This3 H# g# t" y! V. X( T& z: X
// schedule has a repeat interval of 1, it will loop every0 I# Q5 i. v, |9 K, F1 X1 Z
// time step. The action is executed at time 0 relative to
8 p1 [7 ], e' n1 M& m2 C- A // the beginning of the loop.& j8 q' V# n9 x, I& a5 e
% n! ]' C0 Y7 J D // This is a simple schedule, with only one action that is
) r8 r+ \) E' T. y( D // just repeated every time. See jmousetrap for more
$ d( Z# {+ N3 J/ O" J, ?0 d // complicated schedules." s3 S' j& i, Q
) R4 @ i, U, q: V s modelSchedule = new ScheduleImpl (getZone (), 1);( A2 P z/ Z6 g/ i% k$ W1 [$ I
modelSchedule.at$createAction (0, modelActions);2 n% O% C) E" U, w
( l7 P G A/ h8 x
return this;* D: M) f! O: ~7 o6 {& u$ V) E. j
} |