HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 N8 ~9 v6 ^+ a" h; r5 d
, j! F0 Y3 s' _$ _! P; H% t" e public Object buildActions () {$ t$ l; [. g" H" E; u
super.buildActions();
S7 M6 l: B j3 W/ e4 r
+ z8 j- Q) L; m4 d // Create the list of simulation actions. We put these in# H( E8 R* L8 D
// an action group, because we want these actions to be) O0 _3 d# K4 {. ~3 l: A1 O
// executed in a specific order, but these steps should
2 w9 N! m o O2 d! `* k // take no (simulated) time. The M(foo) means "The message1 M" \ }) q( E
// called <foo>". You can send a message To a particular
) x# @* s& l& c, U$ A% D+ C% } // object, or ForEach object in a collection.
0 B* q; h9 n, e- i
# q6 z% S2 Z% o // Note we update the heatspace in two phases: first run4 ]1 X; G) P. t0 T3 Y0 D/ S
// diffusion, then run "updateWorld" to actually enact the
; r; ]3 @6 ]# ^& E/ c" O n2 g // changes the heatbugs have made. The ordering here is
4 O$ S" J( f8 r4 H2 ` // significant!
" j) [9 } j7 v- b$ S 9 X2 _( O. J$ X8 e) ]0 Q0 s
// Note also, that with the additional! g3 m W2 _! C# \: x
// `randomizeHeatbugUpdateOrder' Boolean flag we can( M* Z& }% p! C9 O( ?; T3 h
// randomize the order in which the bugs actually run
$ k: T" Q+ x* a2 N3 q // their step rule. This has the effect of removing any' X d: x0 v# M% X+ i
// systematic bias in the iteration throught the heatbug
+ z: f( d0 p7 n$ Q% e // list from timestep to timestep
, b/ I/ L6 W' o+ \4 ?
! p0 c: T& x- l, V; z' p. l // By default, all `createActionForEach' modelActions have: I) k% s; F, S: i
// a default order of `Sequential', which means that the( {; s+ q/ f. Q" f( U8 w& P) J
// order of iteration through the `heatbugList' will be* j0 s+ M2 p; f9 m
// identical (assuming the list order is not changed& o1 E$ U L) g. \& o S
// indirectly by some other process).7 r9 X: O6 O0 _+ W2 u- [
; _: [: Z. I. z2 _0 x! H8 G; ] modelActions = new ActionGroupImpl (getZone ());1 Q$ J4 C' n; Y( f# s, U
$ h# l- t9 X$ n$ J0 q% Q try {
, r# U0 {$ {* d$ p7 T! ] modelActions.createActionTo$message
& L+ d* m) b0 G" o2 _5 B/ F (heat, new Selector (heat.getClass (), "stepRule", false));* Q d9 w0 w0 G$ V( S O
} catch (Exception e) {1 k. J0 u6 U8 d* S3 o
System.err.println ("Exception stepRule: " + e.getMessage ());# y; Y- X. z0 T5 Q) c
}
3 Y; w5 O; m+ L$ H
# I! R6 P/ M9 T' ? try {
7 b! E5 s2 E3 t* _3 A Heatbug proto = (Heatbug) heatbugList.get (0);' A' v. _( ]6 F {: N
Selector sel =
2 f/ T. d# ~, p- K2 j new Selector (proto.getClass (), "heatbugStep", false);8 g* G7 X P3 U) l' F5 S) w
actionForEach =
0 [6 A- t8 }2 j- y& g! |+ m5 v modelActions.createFActionForEachHomogeneous$call
6 _0 m( I) I8 L8 k (heatbugList,( ^% i& L1 ?+ r, F' @6 C6 V# Q
new FCallImpl (this, proto, sel,: m: C7 s4 w* h* }) ^, |5 I
new FArgumentsImpl (this, sel)));0 o$ b0 h' w5 |
} catch (Exception e) {$ n; W2 ]5 F/ R. v6 V2 X$ @
e.printStackTrace (System.err);$ ]/ p e& R# G
}
$ O+ j) S# g# ?5 _
$ R: D3 x6 ?1 A( ~! w syncUpdateOrder ();
) n" B# t9 L7 g+ `. p
0 j3 x4 D0 w" P$ Q) N3 q try {) V L4 i5 X9 t4 h
modelActions.createActionTo$message , Z1 K) b$ K9 e0 l, U! X
(heat, new Selector (heat.getClass (), "updateLattice", false));% k$ O# D/ A% L
} catch (Exception e) {) k' J3 a$ c; k1 { P) D
System.err.println("Exception updateLattice: " + e.getMessage ());
) r; \6 A& {/ d) _1 e! K }1 `" B9 h& ]$ m3 O' y5 e
& L; s" D- p5 y0 c+ F2 B // Then we create a schedule that executes the; I% L6 n5 }" @$ f6 R: E0 [; ~1 ?, }
// modelActions. modelActions is an ActionGroup, by itself it
5 N" s( [. ~% w7 b0 N: e; _ // has no notion of time. In order to have it executed in7 u6 R8 I6 U( M9 W- V1 M
// time, we create a Schedule that says to use the
6 o8 _4 P5 z) n1 s8 Q4 [- ~% T // modelActions ActionGroup at particular times. This
6 }) m& B+ I" c A7 [ _+ _ // schedule has a repeat interval of 1, it will loop every
2 F* c: b8 s7 W6 z) C: q // time step. The action is executed at time 0 relative to
5 Y' E7 \1 H6 N/ J& i // the beginning of the loop.- f! N. f& p% |4 S' C
7 u7 Z3 `/ N* } // This is a simple schedule, with only one action that is
+ i$ N R, H& g* ] // just repeated every time. See jmousetrap for more$ b) ^6 H8 N0 X$ E/ V& R
// complicated schedules.
, w* i2 R; G u( S
7 w( e2 ?( J0 c8 M+ M/ m* i modelSchedule = new ScheduleImpl (getZone (), 1);0 }3 C( Q! |; }- A# Z1 U/ n
modelSchedule.at$createAction (0, modelActions);7 U# J+ h$ y7 @" d4 v
, u( a0 ^. [( L' j' a$ B7 y1 O
return this;
2 s& E4 n$ y9 Z- w* a/ \9 v2 \ } |