HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 T( [7 h2 q2 }: F, l
- ]2 `! y, A4 P
public Object buildActions () {5 R* Z! t5 k8 K! k. T
super.buildActions();. O# I( w" `. {7 S d4 A. Z9 e) e
; z( ^! ~5 ^- s6 }' \5 o/ a
// Create the list of simulation actions. We put these in" v5 k$ l! T5 |1 q3 }: a2 R
// an action group, because we want these actions to be+ H! C' n1 z- m
// executed in a specific order, but these steps should
9 \ `2 i2 B% o( w! f // take no (simulated) time. The M(foo) means "The message! h- e; }: \# x/ E1 K! n( b
// called <foo>". You can send a message To a particular6 ?) o2 Z1 m; G" S# d
// object, or ForEach object in a collection.
- [. T/ I# O0 l8 t( N8 z7 f! t" X# x 1 Y8 O2 G9 |) G- Y$ S8 L
// Note we update the heatspace in two phases: first run9 K% l! n/ x C# o7 A) K
// diffusion, then run "updateWorld" to actually enact the; J" F5 Q8 K8 ^5 j1 k
// changes the heatbugs have made. The ordering here is
6 } ^- N2 S, f. K3 H/ t w* B // significant!
h' }0 g9 s5 W9 o P* |/ \ ( T+ f, T7 b% S1 B
// Note also, that with the additional
& V1 j8 b1 D! E8 b // `randomizeHeatbugUpdateOrder' Boolean flag we can- V A, i% V$ y/ K% e& g6 s
// randomize the order in which the bugs actually run
5 h" p5 E8 s( k8 f) H% M5 Y% H; Q( O // their step rule. This has the effect of removing any
- O6 [! M E% Z; S/ ]6 O s$ ~ // systematic bias in the iteration throught the heatbug
8 [# [! D7 N0 L+ u% l5 D- i // list from timestep to timestep* T. X C) W4 u2 I+ x- l7 F7 S# v
9 q9 Z3 a3 N$ o% X6 A
// By default, all `createActionForEach' modelActions have" @, D" D* W4 e2 I
// a default order of `Sequential', which means that the4 N& H1 l+ Q* A) h4 J7 _0 M
// order of iteration through the `heatbugList' will be
0 N! n4 x* R8 H0 U: G4 {. G { // identical (assuming the list order is not changed
S E5 K6 M9 `5 A8 P$ N$ C- m6 F // indirectly by some other process)., `' `0 R8 s5 X6 N2 Z5 ?- |" E( G
/ ~ q3 y+ b9 g) A
modelActions = new ActionGroupImpl (getZone ());1 z. e+ ~4 F5 y5 Z* w
$ U8 B$ u A; W9 O- I try {
" I/ ^5 k6 Q: ?) C' j& R, u! c modelActions.createActionTo$message# j# M3 M0 \# r8 C
(heat, new Selector (heat.getClass (), "stepRule", false));: v- h! o; U" ?) P# `6 v
} catch (Exception e) { u; f9 v5 v7 S' p, z1 c m
System.err.println ("Exception stepRule: " + e.getMessage ());) Q* l9 [# ^, v1 Q+ y% D1 W
}: v' b8 M' m- R* y' `
; H3 p. X1 [0 m+ Z/ d Q9 ~5 }2 A9 o
try {
. j' }% G+ ^7 r9 d( j Heatbug proto = (Heatbug) heatbugList.get (0);" d, |( R& \. Y7 X% z
Selector sel = / W4 J. ], G' h& x: }, k7 g
new Selector (proto.getClass (), "heatbugStep", false);
9 H4 o' ?( g1 b1 O actionForEach =: K4 i7 r* J& q- B3 |' Y. q
modelActions.createFActionForEachHomogeneous$call
5 X R$ K; e- W# j: v2 Z (heatbugList,
& e( b a' N5 a: ~" k; I& ~ new FCallImpl (this, proto, sel,* A$ o! V! b3 {: B- @) e8 K$ p3 c) e
new FArgumentsImpl (this, sel)));
& M v' n& Z+ c3 S4 D } catch (Exception e) {7 R! [: N- ^2 i0 h9 O+ }& d* v6 {1 G
e.printStackTrace (System.err);
. o. o+ t0 G) U7 P9 }4 L }
# r) i% \" k0 ^8 y, Z( k' a
) [" a3 C& W0 p syncUpdateOrder ();3 ]/ y9 _9 R0 q) t
|) B6 c2 v1 n' w/ P
try {
& H4 V& V4 a: s( p6 l modelActions.createActionTo$message 0 g& r8 r' R+ X6 i- ?: f
(heat, new Selector (heat.getClass (), "updateLattice", false));
?* o; K6 B6 Y0 z9 W1 v6 a$ s } catch (Exception e) { P- w# c: ?* K0 G2 v7 v
System.err.println("Exception updateLattice: " + e.getMessage ());+ D5 @& d" T) o0 x! d- O% I: ^) q3 Y
}. d8 h9 A7 @. E! m4 ], P( H
# D( K, X) {( h+ G
// Then we create a schedule that executes the
' ~9 K( e) D: M: m1 Q // modelActions. modelActions is an ActionGroup, by itself it2 Y! y( s# I3 C' }8 S
// has no notion of time. In order to have it executed in
: q9 Z6 z) u" ~1 c7 ] // time, we create a Schedule that says to use the
8 k! i! M. l9 A: _6 @ // modelActions ActionGroup at particular times. This
) W; c- X) n& q, t3 q // schedule has a repeat interval of 1, it will loop every& J8 c8 E0 c9 T
// time step. The action is executed at time 0 relative to
. l+ W5 l& Y `/ _% v // the beginning of the loop.
3 _3 M7 F) l8 s0 \. W- z& B" J" s- P' o8 V7 R
// This is a simple schedule, with only one action that is
) I1 f" ~3 z1 V# }: q7 [% ~5 p // just repeated every time. See jmousetrap for more2 m) P) }+ g0 {3 v3 L/ B! M$ G
// complicated schedules.3 C1 c4 m' H4 M* F
$ a4 i1 E) n9 v3 i5 [4 Z' y6 R/ G. F modelSchedule = new ScheduleImpl (getZone (), 1);& W4 l4 N9 k2 N; @; g$ e; Q
modelSchedule.at$createAction (0, modelActions);% s) ]/ m, y& n! z
) B5 c2 W1 [ W5 b% W5 b, A w7 w
return this;
' _& L/ b6 _7 [ i2 Y } |