HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& Y2 e! R$ w. f# w
2 Q+ X5 X2 n8 t/ n& ?
public Object buildActions () {
! K6 h, {/ U6 P) c" m0 }* F1 \) d super.buildActions();4 K* ~* P2 L4 b/ K2 Z, R. N: c9 T
! c' K( |+ {4 V- R2 \0 x" g
// Create the list of simulation actions. We put these in, B. r2 i7 U5 d9 I1 G9 X
// an action group, because we want these actions to be8 c2 @. { t1 _" i5 n5 G
// executed in a specific order, but these steps should) ^8 v1 l9 H0 c2 }
// take no (simulated) time. The M(foo) means "The message, }# n# |; @" y5 C
// called <foo>". You can send a message To a particular
" L$ a* n; V' x0 {0 Q% o // object, or ForEach object in a collection.
9 v' j( ^. A6 @% ~" c! j
/ n, C* t3 _, X. K6 O& G // Note we update the heatspace in two phases: first run
[4 c8 m. @/ Y // diffusion, then run "updateWorld" to actually enact the
' Q/ B' }, U# C0 L; ^ // changes the heatbugs have made. The ordering here is( O9 ~* O; q/ i7 {, l8 A& p. t# m
// significant!
- W+ `& v! d6 } . m+ h. s+ c m: S8 y u3 A
// Note also, that with the additional
* h+ T3 R! \4 y! \5 `: t // `randomizeHeatbugUpdateOrder' Boolean flag we can
; Q7 h* [8 F. [ // randomize the order in which the bugs actually run1 h) F. F) p7 W4 k9 u2 l
// their step rule. This has the effect of removing any
( E N' @+ T, H1 X // systematic bias in the iteration throught the heatbug& p% r* R; {! N6 }+ U
// list from timestep to timestep
; ~5 g1 y& E- r, g
, W. o4 q1 m/ R" F( ?' F5 L // By default, all `createActionForEach' modelActions have
" O/ \3 q; Z; `% c* E3 v: B // a default order of `Sequential', which means that the
& t$ v+ p: e* J: V7 B: j+ ~ // order of iteration through the `heatbugList' will be N1 z( X# s) Q( r( ]- E
// identical (assuming the list order is not changed# |+ `6 f5 d4 e% z! y+ H
// indirectly by some other process).; ~* v; O$ i7 ^2 Y2 k5 `
. H+ A5 z$ N8 [+ e3 }, P- @ modelActions = new ActionGroupImpl (getZone ());" R, I! F; `% K9 b
& x3 a. F1 M9 Y6 }% v
try {4 S4 m; m$ J6 [ ~! x! w
modelActions.createActionTo$message
# R3 p `" L. H6 v% w4 k (heat, new Selector (heat.getClass (), "stepRule", false));
; J) w5 y5 y. w: Q9 F: {7 Y4 B } catch (Exception e) {
- H) M5 I) f |: d) @: Y U System.err.println ("Exception stepRule: " + e.getMessage ());+ d! p9 m" v' W {6 l+ t) o( @ w
}& z% P4 k( i- X( \# e/ e) N9 O
! s, R1 _$ N, c$ Q try {
) k( U( z' d# c, u F- u6 e/ w Heatbug proto = (Heatbug) heatbugList.get (0);
& F( N6 }+ g* O# i9 e) R Selector sel =
8 W3 ^+ E4 O. t new Selector (proto.getClass (), "heatbugStep", false);
; F( L8 a' W1 H3 Z actionForEach =
8 B% _2 u" d c( g) Q modelActions.createFActionForEachHomogeneous$call
' O$ @! O" `2 W8 ]% ] (heatbugList,: }: y$ b4 l6 Q7 X2 w" g7 \. z
new FCallImpl (this, proto, sel,8 O/ @! \8 @, B! ^; K
new FArgumentsImpl (this, sel)));
+ l8 M. K+ g" z) B7 c* \* w } catch (Exception e) {. @' v4 x# H3 h5 l$ x C/ S
e.printStackTrace (System.err);
; N6 c8 J1 @6 e8 t6 P6 n }
1 A2 m8 F n- n5 Z7 E( E& y
) \0 W, `# A+ S3 m& q1 B( s syncUpdateOrder ();" c2 N& w8 n5 s1 [5 Z4 x0 {$ B
% {8 {% G. h U$ \9 }& D! ]
try {
% c3 P5 N4 B8 t9 V8 j# p, w7 d7 g+ e modelActions.createActionTo$message 1 H: i a' C6 I( \9 W1 j" r
(heat, new Selector (heat.getClass (), "updateLattice", false));1 D( Q# Q" i% W, j6 V. h
} catch (Exception e) {% _1 V [7 U& v0 `+ \0 l( e! F( y
System.err.println("Exception updateLattice: " + e.getMessage ());5 a9 n6 t- o5 E( O9 o- b! A) U
}+ M( t, F8 }! I5 z; `
! N, }0 h0 q$ P$ d; v3 B3 d& z* y
// Then we create a schedule that executes the0 u& A, |& S. l; ~5 U
// modelActions. modelActions is an ActionGroup, by itself it
3 M0 z1 d$ D& {5 w // has no notion of time. In order to have it executed in
' @0 N X- R; F# c7 k- O2 f' A6 m- H // time, we create a Schedule that says to use the
( |0 z& d9 u3 w$ u' n3 K$ a // modelActions ActionGroup at particular times. This
8 [' X# u& U4 {* `% {+ K3 } // schedule has a repeat interval of 1, it will loop every# y3 z6 L4 C+ p4 I" g
// time step. The action is executed at time 0 relative to+ ^. ^# b" P) R" T
// the beginning of the loop.8 \8 u3 k; n: [ r
% o9 p2 Q; U- G' `- @2 ?) }! @/ W // This is a simple schedule, with only one action that is1 X8 n$ I7 l, }4 ~/ [$ ~
// just repeated every time. See jmousetrap for more, U& [9 K& d/ N9 n
// complicated schedules.) ^1 G9 P3 }9 l3 |- o9 T0 [
# E5 }: M/ m* D8 e4 J9 H! r
modelSchedule = new ScheduleImpl (getZone (), 1);/ C. l7 p; x) N8 j. M5 t
modelSchedule.at$createAction (0, modelActions);- w8 h: V: K4 h8 \
, D; |& w' _" z. Z" O9 p
return this;
2 Q% M) x. D( P% }3 E+ @ } |