HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 L; e) x; y; P, o0 o9 Q
+ Z) u! T: D& C$ E/ S: p public Object buildActions () {3 S! b' O8 q0 ]( u: h2 C( U
super.buildActions();
* i ]" E& U8 Y3 H$ G( [. E
/ m! c; s# M# Z0 ?* h // Create the list of simulation actions. We put these in- f9 z7 `8 r' _! c! B9 N
// an action group, because we want these actions to be
/ d7 \8 E4 k- G# o9 M // executed in a specific order, but these steps should3 L0 r3 l# V0 _' [# `
// take no (simulated) time. The M(foo) means "The message. l2 N! S8 k0 B0 \" r! m
// called <foo>". You can send a message To a particular
9 U) }8 n1 Y, a* A9 a6 f // object, or ForEach object in a collection., c3 _2 [5 i: q, o+ V! _* l( b
4 a4 w+ T; }( p/ H; a& Q // Note we update the heatspace in two phases: first run
- F! S9 J# @ c1 t0 c // diffusion, then run "updateWorld" to actually enact the
. }( `: f* h) d' u // changes the heatbugs have made. The ordering here is- {) i8 {; }1 J- c4 ~
// significant!
! u! W$ H; U5 e& D7 u& q0 o3 D- [
, o4 P; y: r( p# Z // Note also, that with the additional
$ S( ]9 }9 V- [) y2 x // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 \9 ^& K% e7 L4 F0 w // randomize the order in which the bugs actually run! _/ [* r2 ]! S' r- G3 F
// their step rule. This has the effect of removing any
& D: h# j4 V. L1 X& Y h" G, O& g // systematic bias in the iteration throught the heatbug) J$ I8 P% b- j& F- z7 S
// list from timestep to timestep+ u1 w V: f/ `8 |2 w6 ~
r5 a# B7 m' ~- F7 t
// By default, all `createActionForEach' modelActions have: Z/ ?/ Q2 G' H6 E# S# u0 T
// a default order of `Sequential', which means that the6 T% k8 P e& M! y ~! i5 c
// order of iteration through the `heatbugList' will be8 n- O* t* |/ N, w C8 U& T
// identical (assuming the list order is not changed, F1 h1 g4 |5 \* M f4 b+ L
// indirectly by some other process).6 Q4 C# a- p7 {5 C' W8 v
+ \1 V6 b) e0 M- ^: ~# u
modelActions = new ActionGroupImpl (getZone ());7 s* ?/ H* I$ T( v1 l/ n
" k6 W0 t7 c: a7 }5 E/ D5 ] try {
. r* i3 ~4 Z Z( F) H modelActions.createActionTo$message0 m4 f* M- _" S, `/ _
(heat, new Selector (heat.getClass (), "stepRule", false));8 O1 M/ f4 ?( r* i* L
} catch (Exception e) {
9 [0 E6 n/ x2 k5 w8 T) O System.err.println ("Exception stepRule: " + e.getMessage ());
9 { d# h7 z4 h, r: z2 ? }
1 ~ l: B4 R) I% \& I
2 d% D( D/ {5 G7 D6 o5 N8 b try {& S# D% J$ A3 }" F _
Heatbug proto = (Heatbug) heatbugList.get (0);: m& S3 P( ]) n
Selector sel = . S4 v/ S l5 _6 x
new Selector (proto.getClass (), "heatbugStep", false);/ \" A. @) e8 u* q; K
actionForEach =# L& G3 _3 r# N
modelActions.createFActionForEachHomogeneous$call
/ c! X1 D+ ~3 ^" E- n (heatbugList,
/ m& B- t7 f) G$ O. U s new FCallImpl (this, proto, sel,
- a+ L$ Q* Q1 B6 `2 ~3 a new FArgumentsImpl (this, sel)));* V9 I! e2 Y; T/ A( A9 ?
} catch (Exception e) {; d5 ^" h3 r# Q5 Z+ }9 q3 C5 J
e.printStackTrace (System.err);
3 g: m( Y! \ M+ Q- @/ V) q }0 D# u, b0 E- v( g" K, w# T
) s0 B$ \6 G7 K2 Q- {' J
syncUpdateOrder ();" t8 r. w2 `7 C1 f
3 t: k% P0 e+ B7 M; S8 X# X
try {" u( s( E& U- e4 D r4 E/ f
modelActions.createActionTo$message
% M+ G& c( _% k$ j3 P$ G" E (heat, new Selector (heat.getClass (), "updateLattice", false));9 g: e5 X1 n q; L: z, U2 y0 u
} catch (Exception e) {. J' Z* ^/ P: Q. C: W% ~2 H
System.err.println("Exception updateLattice: " + e.getMessage ());
7 P. w1 t8 W/ N8 R& v }* b# J6 |; S: S ?! r. M' ^! t9 v
0 p- L" c! h2 h1 B // Then we create a schedule that executes the
% R4 s1 O1 h) S1 A0 G1 s+ V8 { // modelActions. modelActions is an ActionGroup, by itself it
; E) E8 ]9 |. F+ N // has no notion of time. In order to have it executed in
' T8 q a* J0 k* Q/ D! v // time, we create a Schedule that says to use the
/ L& E) S5 U6 d // modelActions ActionGroup at particular times. This+ i$ I& K+ P$ i7 P {1 e( d4 C8 L' s
// schedule has a repeat interval of 1, it will loop every0 U5 C2 V( x$ g+ z& q: Q i. _7 k, Q) ?
// time step. The action is executed at time 0 relative to! c) S B5 |) D
// the beginning of the loop.
! U& |6 E' n7 L3 s, t8 ?* |; ?+ G( U: |
! N. w8 I B% A& W" m // This is a simple schedule, with only one action that is5 I# m B5 e' a5 p! o
// just repeated every time. See jmousetrap for more
4 U" B; u& E0 |" F8 Z* h+ l // complicated schedules. G) r2 ] i: b8 g
6 f- E/ C# K4 X: |( ]. s7 f modelSchedule = new ScheduleImpl (getZone (), 1);) ?3 W# e2 C9 P/ t! \ Y% Y
modelSchedule.at$createAction (0, modelActions);
" D& H8 N2 u2 _+ X
; r( ]. v; K9 S' v( H: y7 J1 m' k return this;( h1 x- P$ ~% ]2 O$ X3 l
} |