HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 T+ c P% i; d, C
5 s% t8 s; v, ^. X. ^) o; ^ public Object buildActions () {) i; w- ~+ w/ a# M) V
super.buildActions();
" e: R1 f+ U" C4 s7 y# G* R3 P8 j' ? 8 S1 ~; d d+ k& R3 C4 [8 w1 E
// Create the list of simulation actions. We put these in$ U! \8 o6 q7 {" e4 L
// an action group, because we want these actions to be
" e' m" P4 y0 Y // executed in a specific order, but these steps should
3 M) M9 c- s& U // take no (simulated) time. The M(foo) means "The message l1 [* O+ Z$ ~
// called <foo>". You can send a message To a particular
! q n% u* P, z' U$ |) Z // object, or ForEach object in a collection.
2 o/ W0 c9 g5 O$ t' I/ H & \- C( B: [# o" l2 r
// Note we update the heatspace in two phases: first run
" y8 M$ H; K' O; y3 E$ b' z // diffusion, then run "updateWorld" to actually enact the
; Q7 p9 C F1 N& n; ]$ E // changes the heatbugs have made. The ordering here is" z- `1 @8 j0 i% _- A( S
// significant!* e3 b. s e* Z$ }$ K
- n) T3 ^% D) g0 t3 K1 {& Q // Note also, that with the additional
" ]" F: A$ i; Q& U // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 e# f' I; R7 c+ |; o // randomize the order in which the bugs actually run
8 t( `( P$ Z, X( w2 u9 E // their step rule. This has the effect of removing any$ l* g- {& u9 W0 E' [
// systematic bias in the iteration throught the heatbug
0 V& Y9 O0 W/ I // list from timestep to timestep$ g' B+ S6 a3 B; m4 a
0 K0 j) j6 K+ y$ M // By default, all `createActionForEach' modelActions have
: n, z! R `2 U! E( ^ // a default order of `Sequential', which means that the$ P b, C7 Z) X% p; H
// order of iteration through the `heatbugList' will be2 v D* D, a8 U! J8 e. K
// identical (assuming the list order is not changed3 h4 V" z5 |4 b6 H. j
// indirectly by some other process).$ {1 D6 y9 Y% ^+ B
5 C$ o0 u9 `% u7 l# [
modelActions = new ActionGroupImpl (getZone ());
7 q# N8 t$ l9 I A+ [8 G. z; @7 ]/ ?* a2 s' {8 O9 V
try {
% P; t% \' k1 o/ N6 K6 H- R modelActions.createActionTo$message
( v4 X- _ e# f3 i0 Q% ? (heat, new Selector (heat.getClass (), "stepRule", false));
I8 m5 x0 a) E7 m h% O } catch (Exception e) {
; a2 ?* j9 |3 K- o- M: U1 J System.err.println ("Exception stepRule: " + e.getMessage ());
* ^, \% R D3 [ }
$ y! @! n8 g/ D! O, k0 u9 H8 p" A5 D+ O4 ~3 _% S
try {
: @& E7 B. v; j# B2 w' u Heatbug proto = (Heatbug) heatbugList.get (0);
& d7 B5 s- ]; T$ o4 H( ? Selector sel =
2 a+ n7 E9 ?( f! p+ f* j new Selector (proto.getClass (), "heatbugStep", false);
9 [2 N) Q7 l8 ]# ~+ s7 Y actionForEach =$ g2 h V: S, x$ s7 t
modelActions.createFActionForEachHomogeneous$call
! V( K' z6 t& Q9 |" A9 G (heatbugList,: O, [# A3 O6 u; R- p! i
new FCallImpl (this, proto, sel,; O) h. c$ k) C( |; Z+ ~. ^
new FArgumentsImpl (this, sel)));
1 f* k$ g* v& P, |9 A; f } catch (Exception e) {8 E! n* m d; N2 n# W
e.printStackTrace (System.err);4 w+ J" s# ]) e; h$ g
}
' h+ d( v) x0 z % A6 @: K/ k4 j3 E( V& J
syncUpdateOrder ();
2 O6 \8 ^# a7 J7 h4 i+ S' e- @) ~0 O- N1 B$ A
try {) M: v* T! Q0 H
modelActions.createActionTo$message
1 T+ {9 e; Y6 n6 B (heat, new Selector (heat.getClass (), "updateLattice", false));3 l2 H# u) Z, F9 O+ [$ h6 G
} catch (Exception e) {7 [/ v8 E! z* ^
System.err.println("Exception updateLattice: " + e.getMessage ());' H- x4 g8 u2 j1 X3 [ p q
}9 V5 G" I* }3 }! G. Z- V
0 U" S) `6 S8 K9 H1 ]; J5 h H c0 b/ }
// Then we create a schedule that executes the
$ z8 }* B* H0 x3 }9 x7 u // modelActions. modelActions is an ActionGroup, by itself it; O- S9 b! Q j8 w- S
// has no notion of time. In order to have it executed in# d- `; u$ C! w1 Q( G' d! f
// time, we create a Schedule that says to use the
# O U& }' T8 }) h // modelActions ActionGroup at particular times. This7 l* r4 O+ C o
// schedule has a repeat interval of 1, it will loop every, |# n; x( A8 R) `
// time step. The action is executed at time 0 relative to
0 W+ @% H+ d' |5 a+ v& y // the beginning of the loop.
# l/ ?8 U8 I+ [3 P+ i. V7 H# O
8 N* Y1 Z8 ~3 q3 m. y X" e // This is a simple schedule, with only one action that is3 F' n. n! W( t3 B2 P$ B5 g
// just repeated every time. See jmousetrap for more
8 W& W# E/ I9 W' n // complicated schedules./ n# i5 T# v! w1 r5 r( G- ?' P9 b
9 @8 ~' Q0 E$ R
modelSchedule = new ScheduleImpl (getZone (), 1);
$ p9 h( d I; j$ v modelSchedule.at$createAction (0, modelActions);4 t$ j! h9 y* [
+ W$ ~ {) b6 ?' }7 w+ C return this;
9 ^+ d' ~' {' U6 J/ D' s } |