HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 E* n( A. @: s# C* O6 G
' s/ f+ j& L; f7 k; t) S7 N* T public Object buildActions () {
! \% ?# c `8 \ i, M+ N6 @4 X super.buildActions();8 R" C+ ]8 J) O/ g/ d+ L# j0 Y
. |# a3 G0 i% g9 x, T9 { // Create the list of simulation actions. We put these in
0 a* e: F& q, k9 X7 X4 _# o // an action group, because we want these actions to be
2 E1 O) E3 W& u3 i // executed in a specific order, but these steps should
. J) d& v8 U, W9 T; a // take no (simulated) time. The M(foo) means "The message
# p. @2 l, u& Z6 d" B // called <foo>". You can send a message To a particular3 U7 n& _: a8 b7 A& J" G- w
// object, or ForEach object in a collection.
# L, S ^3 h {
: v! j& w- s) [- g5 Z // Note we update the heatspace in two phases: first run
1 o. l2 R0 g `& u // diffusion, then run "updateWorld" to actually enact the5 n0 z) u7 I# k3 v7 Y
// changes the heatbugs have made. The ordering here is* V* o1 m: w7 e, E
// significant!
' L, B$ M y; M; O
P5 F( Y3 q6 p5 C, D& w, h // Note also, that with the additional4 A% z6 m. @4 I9 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can- E3 J0 @# o) D; j" G
// randomize the order in which the bugs actually run' V( q- i6 N8 p4 T" d
// their step rule. This has the effect of removing any
3 M0 g, R [7 d) @0 S0 q1 ~" ~ // systematic bias in the iteration throught the heatbug( k8 Q3 W8 n, _8 _4 {( F
// list from timestep to timestep: n2 z) {" V( i
3 [9 P+ m h3 Z O1 \3 O3 M // By default, all `createActionForEach' modelActions have
) u' X: x m* i- c' L/ Q // a default order of `Sequential', which means that the
( Y# Q+ D- D5 L: e0 M // order of iteration through the `heatbugList' will be0 M# a& R$ l+ e0 q
// identical (assuming the list order is not changed
: s+ \; P! a* p7 K" b // indirectly by some other process)., v8 Q; h9 D8 W z% s4 x6 y
( a& K, d5 D9 ~* j modelActions = new ActionGroupImpl (getZone ());/ X3 I$ ?; Q% K
0 |7 ?0 m: _5 H' ~" ~ try {, m' V7 t9 S( o i& p6 I
modelActions.createActionTo$message
* d* H# I/ Y- U+ l2 y1 b/ v (heat, new Selector (heat.getClass (), "stepRule", false));: G& \" o3 ^7 y* r2 J6 h
} catch (Exception e) {; D, t M6 m7 ]% i% o. ]
System.err.println ("Exception stepRule: " + e.getMessage ());7 g& [% k; ~* h1 C8 p, M; X0 v
}
& a" c4 Q4 |* W8 a1 D% m( H1 a6 u5 c# y$ U) g9 K$ T3 y
try { {5 }% L; @' s
Heatbug proto = (Heatbug) heatbugList.get (0);
' J/ o- g, P& v Selector sel = , Y8 c* C: H% d8 q
new Selector (proto.getClass (), "heatbugStep", false);
; t& K1 |( e5 ^/ ] actionForEach =* Q) \3 \9 ?. v8 A. {* j
modelActions.createFActionForEachHomogeneous$call
- t. _ ]: f5 ?/ m# U( h8 i/ w1 H (heatbugList,
8 J- @$ ]0 N1 R/ |! S5 G new FCallImpl (this, proto, sel,
# j6 M4 p! H! U new FArgumentsImpl (this, sel)));
8 w* Y+ }$ I% ]. E, r8 ~: u } catch (Exception e) {$ G$ I9 m3 Z! Q( t- K/ q! x ]
e.printStackTrace (System.err);
* @& C& b2 {) ]* g, R }) i: L4 e; o u/ z. G8 r/ v
2 @" \$ `# C! U v2 ?1 u9 g& r% ?' C
syncUpdateOrder ();0 g1 S4 c( G0 E0 X
# Q6 R' P9 K4 l9 L8 k2 j try {
k. M" E! ~) }4 D0 d) [ modelActions.createActionTo$message 9 D! r9 l c5 F! g4 }# K7 b
(heat, new Selector (heat.getClass (), "updateLattice", false));
H& b2 o" b" _5 N) b5 c( m } catch (Exception e) {! \# |( o' C0 g
System.err.println("Exception updateLattice: " + e.getMessage ());+ L6 @7 `2 h( @& U% q" J, u
}
! Y& R( W x' d, |5 ^" P a
: {( Q- S$ E6 y; ` // Then we create a schedule that executes the. v! _6 ?' h M
// modelActions. modelActions is an ActionGroup, by itself it
3 c2 }0 ?. m7 R A/ P8 e // has no notion of time. In order to have it executed in
. }, [( C7 l) R* a0 T // time, we create a Schedule that says to use the' u/ z7 e8 h+ b4 W
// modelActions ActionGroup at particular times. This
8 a* ~0 j( o7 ]0 A // schedule has a repeat interval of 1, it will loop every
. U" [3 {7 e1 e* A7 C+ P, ^ // time step. The action is executed at time 0 relative to( c2 k2 S: x6 N4 e* D: L
// the beginning of the loop.3 D5 [6 g; v7 \( y: a% m: r! X
2 B- W0 s4 [4 I; W( i" S
// This is a simple schedule, with only one action that is: R# D' ]% C8 Z
// just repeated every time. See jmousetrap for more
0 B( g \. }) e // complicated schedules.1 F+ g1 A( ^4 H
& J# Q Y F/ s' h& t3 c
modelSchedule = new ScheduleImpl (getZone (), 1);3 B3 V# R. s. L: [4 m& M
modelSchedule.at$createAction (0, modelActions);! O0 _& ]5 `* q P% M
: ~- X( Y+ ?# E5 I0 Y2 F
return this;6 O5 q+ y7 _, B9 [
} |