HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ L# Q2 M( ^1 R1 n
8 j7 T( m8 N( `+ L public Object buildActions () {& K6 U1 r: h) p e
super.buildActions();
8 p6 F# x$ p3 S& U2 m; I
" M- X* ^7 y0 }; A2 F$ C // Create the list of simulation actions. We put these in
* r" n3 ?7 h6 V8 L5 E // an action group, because we want these actions to be
. R4 [/ i5 @4 }8 \ C1 i // executed in a specific order, but these steps should6 V0 D1 m& m4 h3 _7 |7 P+ Z
// take no (simulated) time. The M(foo) means "The message' l5 i, u$ n) h( ?( e
// called <foo>". You can send a message To a particular4 @1 l0 `) ?: s: B
// object, or ForEach object in a collection.2 J E; n3 @- H- p# R1 @
0 a2 i/ o" W2 m# w2 c% ?% K) M
// Note we update the heatspace in two phases: first run
6 P1 l4 Q( }2 E2 q8 k7 }$ g$ ~# [ // diffusion, then run "updateWorld" to actually enact the
; U Y9 P3 N/ b: l% e. r8 W // changes the heatbugs have made. The ordering here is `* e! d8 r, H2 p0 z: W
// significant!9 k! u7 m" z4 \: U% J* w
! Z8 s0 y& p7 Z+ a& u$ l // Note also, that with the additional" G7 s1 W \4 V n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, Y7 ` X7 H6 a O* L! m // randomize the order in which the bugs actually run1 w3 G' x h& G4 |) g" J7 M5 \% u
// their step rule. This has the effect of removing any( t. n3 w, i" b" h. k s; h
// systematic bias in the iteration throught the heatbug. w F& V/ v5 P- \( e7 q
// list from timestep to timestep
! U) ~6 `4 e7 D* j+ R0 {
% M* `, B V. A6 P& f+ r& v) G" b- _ // By default, all `createActionForEach' modelActions have
2 v: w Z/ x& M // a default order of `Sequential', which means that the
7 R. ^8 R! _ m // order of iteration through the `heatbugList' will be7 W/ R2 @ N. t4 W1 L. Y0 Y
// identical (assuming the list order is not changed; [2 X4 }9 B: U1 Z
// indirectly by some other process).% R* U) K4 ?% R" \
4 a, u6 \2 M# L) H) D modelActions = new ActionGroupImpl (getZone ());) X8 I/ P. l ]# r$ p
0 m+ n0 w( ]# @( g0 H
try {" n* b$ `; e" c6 c7 W6 [: K( r
modelActions.createActionTo$message
' Z: o; F% d( u% z/ H+ ? (heat, new Selector (heat.getClass (), "stepRule", false));
2 S! n j1 T K2 s& T! T } catch (Exception e) { m0 @- F2 g G
System.err.println ("Exception stepRule: " + e.getMessage ());
2 Y" v4 v1 R4 z }; x H9 \$ _, }7 X- [
9 o: _8 T+ _7 Q* c
try {
. A& O) \/ ]5 Q) y Heatbug proto = (Heatbug) heatbugList.get (0);
0 o3 p) ^- B2 c; E Selector sel = ' v; {" a3 _. v
new Selector (proto.getClass (), "heatbugStep", false);1 i/ E3 B2 d. x, f7 U3 K
actionForEach =7 e/ z+ I1 \% {. Q6 K1 ]( |% }% L
modelActions.createFActionForEachHomogeneous$call
! ?5 i" q0 ~% k (heatbugList,4 {3 h5 f+ v. ^ ?+ G5 ^" `( ~7 z
new FCallImpl (this, proto, sel,
. P( k; h1 n8 H! ?% |. g- z new FArgumentsImpl (this, sel)));
; `$ S7 ~" q% W7 [ ]& c9 U7 E* x7 ^ } catch (Exception e) {
5 P8 M+ y# M$ I e.printStackTrace (System.err);
, F* V* e9 Q, M' {' w }
* e+ f# ?) Y4 t! X
" Z+ ]- F# J8 i syncUpdateOrder ();. Y" J) d6 { @6 N; q j5 F$ c
! D0 f* n; t% Q6 S" j4 o) | try {
0 E6 i. ]) F) Q& x5 s7 ^ modelActions.createActionTo$message
& u2 l J9 x+ W9 x0 n (heat, new Selector (heat.getClass (), "updateLattice", false));2 S. o$ I) j" [8 A8 J6 i3 _2 k8 N
} catch (Exception e) {2 L, g6 r1 @0 g6 ]- H% t
System.err.println("Exception updateLattice: " + e.getMessage ());
8 d6 N& P. a$ w* }. O% v" F5 \ }
0 @) g2 N5 _1 c. |
; H' B2 r' c! |$ f6 A! u- V // Then we create a schedule that executes the* {- Q2 @4 d( o6 D" Z5 s4 }0 M5 y
// modelActions. modelActions is an ActionGroup, by itself it+ H- V0 L' a2 x8 t& X, Z7 Z
// has no notion of time. In order to have it executed in
) } `, J" \- I: k5 ?) o // time, we create a Schedule that says to use the0 i9 H1 z5 D( C7 b: r5 S4 b5 i
// modelActions ActionGroup at particular times. This
1 j0 K4 X0 {1 K3 A/ P // schedule has a repeat interval of 1, it will loop every
; Q% S ~; u V3 d2 V" i // time step. The action is executed at time 0 relative to7 }6 ^* n+ W$ u% d
// the beginning of the loop.
0 n/ c0 x. K: n
5 d+ ?" u. f# c v6 o8 U( o // This is a simple schedule, with only one action that is
2 h0 I; ?) D2 O# {- Y // just repeated every time. See jmousetrap for more
! V2 H* ?" k. q I# ?+ x // complicated schedules.
$ c H7 C+ |( o4 M4 o; n% A- t
L5 C1 s8 o# N modelSchedule = new ScheduleImpl (getZone (), 1);
% v$ P, n) m) S6 Q) f modelSchedule.at$createAction (0, modelActions);
+ n }$ A$ g7 n1 M! e4 k; y / O, ^, `1 M" f8 n% j
return this;: B2 x7 t0 r# s* ~" c
} |