HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" y f! O: k- q" o$ k
6 p6 N' w' ]3 u; R+ J
public Object buildActions () {
0 C3 k3 q0 f; e) T' q# V: F9 X3 e! X+ M super.buildActions();
7 Q3 [# i8 n- Q' ]2 R, n
2 q& K2 d! y/ J- `0 a4 W // Create the list of simulation actions. We put these in( Z3 o3 L4 k6 y9 k
// an action group, because we want these actions to be
+ M& Q9 s. S+ y% k( W4 e/ {6 b // executed in a specific order, but these steps should9 b$ |# I. {- D& x2 D
// take no (simulated) time. The M(foo) means "The message9 ~/ w: F. p+ o1 ]1 G9 Z
// called <foo>". You can send a message To a particular& z+ k! _- y, @, F* d6 f/ q
// object, or ForEach object in a collection. i1 q! B* r8 {) P, {
# \& b& h, E5 I) J+ L
// Note we update the heatspace in two phases: first run6 C! Q3 v$ x6 r7 R/ i
// diffusion, then run "updateWorld" to actually enact the- y3 \" I6 t0 {
// changes the heatbugs have made. The ordering here is
1 p6 O! l5 X% ?9 m: R3 L // significant!& l" G8 I( @( M }1 W" a! F% ~
9 w7 Q3 M o& ?% L& U4 m
// Note also, that with the additional
" n' h1 O+ h, u! U3 g, V // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 k& c* G2 S# s3 c8 L- k$ { // randomize the order in which the bugs actually run
, ]: X, ~; E* L // their step rule. This has the effect of removing any
# G/ n" U4 W" b1 `$ ?( q* ~) }6 P1 E // systematic bias in the iteration throught the heatbug; N4 F- J) |4 ]9 h, w
// list from timestep to timestep
1 |7 T. ]3 D3 l2 u- j ; j ~& l H& ~0 b/ H
// By default, all `createActionForEach' modelActions have( k5 @6 s' H9 m
// a default order of `Sequential', which means that the- e6 W: G1 V0 e+ ]/ r% M; F
// order of iteration through the `heatbugList' will be
/ u9 X9 i3 d0 V+ c! V // identical (assuming the list order is not changed( M+ V) B+ T7 y* b5 v7 s% R/ c. t
// indirectly by some other process).
- |" \, X% q- K, t 8 V; Q5 Z2 \) ?+ |7 F" o( N- \/ y
modelActions = new ActionGroupImpl (getZone ());
6 n8 v; r" J ]* {7 R; k0 T# I0 H( I1 b# x/ C* r; @" t* F
try {! a. }+ N9 v. W& E7 g" r7 C
modelActions.createActionTo$message
' D' p$ Y: e% t) |3 d (heat, new Selector (heat.getClass (), "stepRule", false));
6 G3 T. f1 n1 Z% M3 Y } catch (Exception e) {, q5 v3 D; a( ]( K f* G. u: U
System.err.println ("Exception stepRule: " + e.getMessage ());
$ D3 i# V+ d4 _# x) {, _ }: e- \8 h& q0 L- J2 n
; v* K" W! ]. N% I. k7 b6 ^) t try {
0 j k0 Y c0 e ~2 o Heatbug proto = (Heatbug) heatbugList.get (0); O7 M; V$ P$ Y, B4 L
Selector sel =
* z6 t" ~+ |2 ~' A- a new Selector (proto.getClass (), "heatbugStep", false);9 R H K1 G. K& b/ x4 d8 H
actionForEach =
7 u$ [2 i. M7 M" f0 D; H0 g- q modelActions.createFActionForEachHomogeneous$call% v* e ]/ T6 q: t
(heatbugList,; |( p- T/ \; z. K2 h$ N% B: u
new FCallImpl (this, proto, sel,2 d$ O, I. D9 x6 d
new FArgumentsImpl (this, sel)));% F; o" J& U" |/ { E7 g
} catch (Exception e) {* x# V* w2 o" d; z
e.printStackTrace (System.err);
+ S" k2 s: G/ G$ z; b }
& P7 n) @! Q5 |% u7 J( [# { - u4 Y( K, ^ _# f' n
syncUpdateOrder ();* Q2 c) F7 I# |2 D* `. G
' ^: ?0 e; q& U) ~, O try {7 l; [/ _. C3 c" t+ V
modelActions.createActionTo$message % ^) l* M% W) s5 U6 _
(heat, new Selector (heat.getClass (), "updateLattice", false));
# g, N7 G4 X; s0 a, ? } catch (Exception e) {
; U( ^7 K+ ~0 v9 k! [) ] System.err.println("Exception updateLattice: " + e.getMessage ());8 b: w6 f4 l$ w6 `
}
4 K: ?8 X4 c! ^/ d2 N- _7 M0 W: W
5 A5 P0 N/ |) y // Then we create a schedule that executes the3 ^/ s$ p0 \* ]0 B0 L6 s+ D. Z" ~
// modelActions. modelActions is an ActionGroup, by itself it
" C! a/ p! i" y( p9 g' U$ F; H% ` // has no notion of time. In order to have it executed in8 Q7 v) ]$ _2 p5 M) D0 G0 T
// time, we create a Schedule that says to use the8 f6 ?) H5 L3 z
// modelActions ActionGroup at particular times. This2 k/ `3 D, J* v+ J8 d P" p: p
// schedule has a repeat interval of 1, it will loop every
}0 K: ]4 \3 t* H* T( p! L // time step. The action is executed at time 0 relative to8 _0 _! k! K6 q( E
// the beginning of the loop.
2 X" Z R: ?, \6 } W3 K, @* O! P% z; t) T
// This is a simple schedule, with only one action that is
" o7 B9 k( `2 _, ?4 I: F5 ^ // just repeated every time. See jmousetrap for more
; `% A% N$ i. b4 i: {5 v/ z // complicated schedules.) w% ^) L, m7 n7 v, }
# D6 F/ E; R# `3 A/ n1 [$ l
modelSchedule = new ScheduleImpl (getZone (), 1);2 ~8 E0 E' I% \1 l7 [$ b: d
modelSchedule.at$createAction (0, modelActions);! f9 T% u6 a. n0 Z
" Z$ j& F; Y- G& Z8 b# w$ z& W$ e( C/ w return this;( S- v! u# f; b0 v5 N" w
} |