HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ _" W7 i* R" f7 V9 Y6 m) Y5 c T" T( \5 ^* {6 g$ { @% [
public Object buildActions () {
2 R9 d. @; r y/ e super.buildActions();1 p- c4 x( M5 V& D0 h
$ L, @5 Y3 o6 l7 y8 G1 x // Create the list of simulation actions. We put these in
; v- H; d& R1 \& ~- A4 C4 C // an action group, because we want these actions to be% e' q% ^8 O% S; ^: {6 p
// executed in a specific order, but these steps should! u- b" ]3 f0 K- ?& {, q* }
// take no (simulated) time. The M(foo) means "The message1 Z# M) J# T! s: b8 ^/ F
// called <foo>". You can send a message To a particular0 \6 w8 k Q/ N. M0 b
// object, or ForEach object in a collection.
9 p4 T* q o) Y2 m% p6 B
# ]5 n9 \8 b# L$ f // Note we update the heatspace in two phases: first run
- z1 p! N8 y9 H // diffusion, then run "updateWorld" to actually enact the* y9 h& i4 z' ~: t6 k# ]* o0 g6 D
// changes the heatbugs have made. The ordering here is
* A; u: d% O# c2 V. k, _ // significant!* v, U- G9 L4 Y+ S5 e5 Q
5 @, x0 G/ z2 r- |( Z- K8 w8 L1 S
// Note also, that with the additional. v/ v$ t' a& _! \: v* ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 S/ `- ~- b" r P$ Q7 R2 q3 g+ W. W // randomize the order in which the bugs actually run
/ a3 m J: E, L, `* P // their step rule. This has the effect of removing any
3 B2 k% ~7 D$ t4 ^ // systematic bias in the iteration throught the heatbug! n# q- g k C: {& } {+ q. l/ r# ~3 A
// list from timestep to timestep
6 V% L+ i) E2 |
# d3 p" g, Q% a' ~& R i5 p. w8 a5 e1 U // By default, all `createActionForEach' modelActions have
* @; Z' n" N1 k2 R8 @+ M5 Q // a default order of `Sequential', which means that the
2 v) \! l& N2 M& r9 u z/ v // order of iteration through the `heatbugList' will be1 ^0 i0 C5 C* Q: ?2 {0 I
// identical (assuming the list order is not changed# F; O2 ~/ v4 G5 p* k
// indirectly by some other process).- j A4 l) G6 s/ D
8 q! b3 w4 G5 P* D3 N/ Q" `
modelActions = new ActionGroupImpl (getZone ());' v& v+ H1 }4 ~* A
6 l0 K; o- h# g3 p9 w4 \8 C try {
; m0 s! O5 @" E modelActions.createActionTo$message
" M. S$ b/ O3 _# @' L# R (heat, new Selector (heat.getClass (), "stepRule", false));1 a2 U5 D1 E+ n+ l( t6 E
} catch (Exception e) {* k5 s5 m; Y8 @4 l' n; i
System.err.println ("Exception stepRule: " + e.getMessage ());
8 B# E' w; z; {9 c! ?) J }) D1 d# y7 [8 `0 p
. _& P: n0 g. U try {. i0 z1 d1 ?" ?5 r# z" J
Heatbug proto = (Heatbug) heatbugList.get (0);. H( @/ ^( M. L# E" P' l
Selector sel =
, z3 u. ?- L; I+ u5 _+ r; W9 m new Selector (proto.getClass (), "heatbugStep", false);3 O7 W) w/ Z( k; T
actionForEach =
, m. B1 R* _0 X$ r" b' I) x8 f3 m modelActions.createFActionForEachHomogeneous$call
0 b8 l; I. r& B9 L5 W! b0 ]3 v3 t (heatbugList,
9 I/ x! K/ r( t9 Q& B/ d new FCallImpl (this, proto, sel,
, T9 p% z! a1 C$ Q# K' ? new FArgumentsImpl (this, sel)));
3 i* n+ p" u8 u; n( l$ } } catch (Exception e) {: T! V( ^0 W, k& D" \# X7 N5 b8 c4 N
e.printStackTrace (System.err);# \ k9 g. y! h# [! R6 j- m" o
}
! I3 |2 A' {6 N; S1 R* |
+ D2 A, a& c1 R K- | syncUpdateOrder ();. M( J) h- s0 B4 b: j! h; @
0 O, \# `# T1 G* k% @, B7 U try {
" |% i& r s5 G& h9 d m* T modelActions.createActionTo$message
' u" W! L; r5 q* d I0 G5 S (heat, new Selector (heat.getClass (), "updateLattice", false));+ N7 }" f4 o' P2 ]3 D; d1 P/ t
} catch (Exception e) {
! a$ f$ e/ ^* C! y System.err.println("Exception updateLattice: " + e.getMessage ());6 u0 i' F) `; M. s' [
}. Z4 T7 \5 x6 i5 a4 Q
: P+ F! R5 F& h& @' I. x8 S- A // Then we create a schedule that executes the$ p2 w" r. P7 m u
// modelActions. modelActions is an ActionGroup, by itself it! m- M+ P7 M. J5 `5 d
// has no notion of time. In order to have it executed in9 D, r: D* U& x# {$ f; W
// time, we create a Schedule that says to use the( o: ]7 J* v0 e7 _- a
// modelActions ActionGroup at particular times. This
+ i; _8 ]8 W: J8 b# q/ b) Q: R // schedule has a repeat interval of 1, it will loop every
6 f# q6 V& ]& z4 Q, e/ | // time step. The action is executed at time 0 relative to
1 g! V, r Z2 f) B5 ? // the beginning of the loop.
9 \7 i5 y$ T3 R9 c0 z
* Z- [' y" r6 Y$ H9 C5 x // This is a simple schedule, with only one action that is
- L% N! N( A; U& B0 D2 ?% G* i // just repeated every time. See jmousetrap for more
9 u$ M S0 I- N* ^0 v" J3 i // complicated schedules.
& W3 i1 h, e: Y' M0 N6 Y
. K( y3 s- U- u# q/ j. j modelSchedule = new ScheduleImpl (getZone (), 1);
( e, e: t/ M! m! {7 f* ] modelSchedule.at$createAction (0, modelActions);
+ @9 h) P4 v+ D9 j8 x ! Z) @! Q6 }" i- x
return this;7 z& Z% I- R3 B3 h
} |