HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 f, r; l9 m: B; y( H- x) F% y0 u2 e- }) X# C
public Object buildActions () {
. Q2 P4 |6 G S G* z' n" S super.buildActions();, K1 ]& u& A+ j1 [6 o6 D) V$ ]" P
+ ^/ x2 h: }- e( `4 s Z0 z. F8 A' f
// Create the list of simulation actions. We put these in
+ I9 k8 P$ Z1 S // an action group, because we want these actions to be& _) Q3 ~- _! h
// executed in a specific order, but these steps should4 C2 A! B# g' H% @
// take no (simulated) time. The M(foo) means "The message" z* O3 S( J0 E E0 Q( u) [
// called <foo>". You can send a message To a particular
2 l/ X* X0 A ~6 C! R // object, or ForEach object in a collection.
" L( a% J7 J+ s+ W ( d" v) N/ a! H. @" k, o
// Note we update the heatspace in two phases: first run
. I1 s: P5 {. S1 V; W // diffusion, then run "updateWorld" to actually enact the) k8 ]* w' ], q( C1 m
// changes the heatbugs have made. The ordering here is! D2 o* z! W+ A5 y3 z1 h, H& e
// significant!
! W- R+ E" v5 @2 ~0 J+ |9 w; H. |9 V ( E$ j9 x8 u0 i h
// Note also, that with the additional1 \# d8 p+ p& C0 s! o `) O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 O: K9 q: f0 b1 W9 |1 Z // randomize the order in which the bugs actually run# C# J' b+ F w
// their step rule. This has the effect of removing any
$ U3 ]" O' Z* M& m7 f // systematic bias in the iteration throught the heatbug+ o- w, |+ k8 F( M) h5 Z
// list from timestep to timestep
; ~4 }: N. a$ k- T+ L9 s * p, \( j# i1 @' t) N2 j3 e7 K5 t
// By default, all `createActionForEach' modelActions have9 Y: [, f! L' I0 T* }1 A4 Y
// a default order of `Sequential', which means that the
. F1 ^' k4 ]0 Z9 E; @ b6 D6 Z7 b // order of iteration through the `heatbugList' will be+ m4 `% ~% L9 _
// identical (assuming the list order is not changed4 e! @1 G" ]& U
// indirectly by some other process). d$ Z. t$ R/ T8 }% Z
1 f) x+ C' [/ b' }+ t# G' ` modelActions = new ActionGroupImpl (getZone ());3 v5 U& z3 i, x: q8 |* U& r
@) U0 w- O0 ]1 o9 V; H) o) _. }. ~ try {) u [6 Y1 p: Q
modelActions.createActionTo$message4 G+ R+ z) v2 n6 A) P6 G
(heat, new Selector (heat.getClass (), "stepRule", false));4 E: ]+ Y( C8 b# r' {
} catch (Exception e) {
" c+ u+ G9 s; U; o" N0 l% W System.err.println ("Exception stepRule: " + e.getMessage ());
/ i3 H/ }% ^4 K9 t# Y$ N4 e }; m: y! A( t$ X; u
: l/ ~. A/ T; M3 s
try {& H Z) J3 D* }3 b
Heatbug proto = (Heatbug) heatbugList.get (0);
1 M9 F$ Y3 p1 z: | t Selector sel = ) }7 i% A0 F- l+ C
new Selector (proto.getClass (), "heatbugStep", false);
5 g: [* V1 a V( r( Q actionForEach =9 ~3 O0 w7 f3 z7 x: f( @
modelActions.createFActionForEachHomogeneous$call P" O1 S; S) I, z7 @6 Z7 W
(heatbugList,
4 }( K6 @. U6 O' U+ B new FCallImpl (this, proto, sel,# x: q+ O( ^+ l5 Z% k0 H
new FArgumentsImpl (this, sel)));% x) y! C# }4 y# f# z4 W G2 N
} catch (Exception e) {
& Y/ j3 S: e& U5 N e.printStackTrace (System.err);
: G+ Z" ]) E9 z( I }( n9 r- \1 ? y( v
: b, s2 c6 `: F( H3 l: I syncUpdateOrder ();
' m- P- f4 |/ A5 i& r( Y( }4 ^4 E0 K) S6 I g
try {
) t K0 R! u) U modelActions.createActionTo$message $ V. r, p/ g, [
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ Z) Q1 E! Y3 a4 e1 E } catch (Exception e) {1 G4 ^$ h5 T& y# G g
System.err.println("Exception updateLattice: " + e.getMessage ());: w3 d9 U+ [8 z: |8 z ]* S3 I7 x6 r( F
}
& Y0 z" b% O/ z8 p' l5 D
( y6 H" b n' N& [0 U9 I // Then we create a schedule that executes the( t, Z- }6 b+ g
// modelActions. modelActions is an ActionGroup, by itself it2 _1 d! x$ O! J# v
// has no notion of time. In order to have it executed in0 |) [) r' s, e Q
// time, we create a Schedule that says to use the
2 c6 z$ H/ k- s% A. @7 u // modelActions ActionGroup at particular times. This# U/ f8 K; B4 F Y/ b! H6 y
// schedule has a repeat interval of 1, it will loop every
" w0 U" O C$ T5 C // time step. The action is executed at time 0 relative to3 X) o% {% U4 i
// the beginning of the loop.3 {# d/ @6 H3 P- _' |+ E
6 h: p& a& z* L; d
// This is a simple schedule, with only one action that is
- C4 Z' a; H* j3 h // just repeated every time. See jmousetrap for more
7 A3 }& c3 s# n5 V: i // complicated schedules.
7 K0 g2 T3 U: F+ J" n : E8 R" y" L& n, S( N
modelSchedule = new ScheduleImpl (getZone (), 1);
" V$ Q, c$ L9 o/ ^ modelSchedule.at$createAction (0, modelActions);2 z/ i! |4 B+ P1 F9 a2 H: D$ z, [
; [% j* b# K5 C; b v9 C( { T. @ j return this;" {/ n; B0 m4 J7 t: o: g* `
} |