HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 R+ q8 D! r: K/ {3 @! O e
, B, j) k; H$ ^* P& G; d* U
public Object buildActions () {
6 Z8 x( i- I- P: O; x, O super.buildActions();6 q6 g# |2 C. Q
- G* Q4 A8 a) q6 ]5 u% I5 y* t
// Create the list of simulation actions. We put these in
2 ?- u! [, C2 L. B, T# H2 g+ x // an action group, because we want these actions to be2 x, r- [* z8 z/ P- q
// executed in a specific order, but these steps should* w- B" U3 o& Y' n0 N, J
// take no (simulated) time. The M(foo) means "The message
1 [3 Q# R( \# } // called <foo>". You can send a message To a particular
5 c& a/ f. n* m G2 V; T' |7 w, ~! ` // object, or ForEach object in a collection." v4 e) K# N7 q+ d3 @. C2 Z
6 j0 U# k* ^7 s- i. K
// Note we update the heatspace in two phases: first run( |6 Q* @. A1 k0 N6 w/ r |( o
// diffusion, then run "updateWorld" to actually enact the3 e1 S, R1 J* x3 s* A
// changes the heatbugs have made. The ordering here is
B! m9 v( P! U* o' _* [$ m // significant!8 X- e$ g# [+ q! W4 o% C. Z, f
5 i& K+ u4 W+ J* m // Note also, that with the additional
7 k0 D# i% G1 } // `randomizeHeatbugUpdateOrder' Boolean flag we can
& U3 ?& m$ j s; C+ q // randomize the order in which the bugs actually run
9 W% }; \) b- M2 T& O( d // their step rule. This has the effect of removing any
- A4 U8 G4 g- A: n7 W // systematic bias in the iteration throught the heatbug
7 k# m5 v3 h9 c" H7 X // list from timestep to timestep" A% s- p; H4 c: g& Z
( a1 m2 j. b- K- `
// By default, all `createActionForEach' modelActions have
! c) m4 l# a3 c // a default order of `Sequential', which means that the
4 @7 K- i! m/ B: ] // order of iteration through the `heatbugList' will be
7 O( n( H. C" J6 F* k // identical (assuming the list order is not changed/ ?2 A* y* K. g; S8 ]
// indirectly by some other process).% h# h# y* w3 j6 K8 M" {" L1 ^$ V: V
8 s8 A# Y) {) a9 L! E; | modelActions = new ActionGroupImpl (getZone ());, Z+ x; F* A* J6 M
O1 I' q, g5 T o% L. O try {
9 ^9 B6 k- C' b modelActions.createActionTo$message4 S& s+ ]" X/ b* _) l3 V6 ?. Q
(heat, new Selector (heat.getClass (), "stepRule", false));; n$ o6 w& y! ~* @; S
} catch (Exception e) {
7 m' @6 V' @- `* ~ \1 A System.err.println ("Exception stepRule: " + e.getMessage ());+ T8 C; C2 G5 }/ _9 W+ v
}
2 Q9 F3 a8 X3 w# q$ R: l) {8 }, U7 q9 e9 c7 v
try {
% i9 K2 U. Z9 O& u o Heatbug proto = (Heatbug) heatbugList.get (0);
, S' {1 L- x ^7 E4 b Selector sel =
! ?+ ?% ]( [ @7 p9 J new Selector (proto.getClass (), "heatbugStep", false);, \- Y; X/ e$ |5 s0 V
actionForEach =1 u6 n# n! g: H4 X. R w0 f
modelActions.createFActionForEachHomogeneous$call
9 l& D: h0 p3 k' g0 _ L/ K4 ^ (heatbugList,
2 A, ]4 Z+ V- w, K( C) I" E1 x" S new FCallImpl (this, proto, sel,
* ?9 [8 d1 w, Q' o$ P new FArgumentsImpl (this, sel)));2 n7 V+ t) |- I1 ~1 ?
} catch (Exception e) {9 m- n+ z3 F: t8 M( z; L6 ^
e.printStackTrace (System.err);
! X. y# s2 |2 ]5 t5 } }
; x! z6 n! R" C8 o! x* U8 U- I1 b% t
/ A2 z$ o& g6 X/ r+ ?- \ syncUpdateOrder ();7 j. O. z" D) D
6 d" [6 s/ K7 V8 J5 |8 S: J) n s% } try {+ \# }8 b5 \4 {4 |
modelActions.createActionTo$message 3 f# d0 }* K8 k8 b7 T6 D* f' q
(heat, new Selector (heat.getClass (), "updateLattice", false));$ ~# \/ L/ Z$ F: D6 G7 l
} catch (Exception e) {( Q3 ]/ c* r% R6 L/ z! H% f
System.err.println("Exception updateLattice: " + e.getMessage ());
' z- i. I) e2 }- s" Y! X6 @/ q }% m# v J; m) o* u
! Q( a" W6 r" t, e
// Then we create a schedule that executes the/ F+ Z' J, Q9 y9 p H6 |: ~( m
// modelActions. modelActions is an ActionGroup, by itself it8 n# n. ~7 E0 u5 k
// has no notion of time. In order to have it executed in
. C( I3 H# C; z7 B. P$ T // time, we create a Schedule that says to use the
- b$ [, v: T5 H& F& F* F) o" j // modelActions ActionGroup at particular times. This
Z' }, @( [+ v4 i // schedule has a repeat interval of 1, it will loop every
% S% z1 Z/ e, j. x5 l* Z) a // time step. The action is executed at time 0 relative to+ g' i# s" c$ g2 r& w x
// the beginning of the loop.
" c- u2 E# `+ S9 E% k$ [2 d. g R# b8 u* {8 p
// This is a simple schedule, with only one action that is7 h% u! ]$ e" e" n1 n& N x
// just repeated every time. See jmousetrap for more8 M0 F( T" W8 L* q
// complicated schedules.5 w& F/ s% T' G6 V7 r
/ A8 I I3 |7 w1 ~) \! |
modelSchedule = new ScheduleImpl (getZone (), 1);
" S6 |$ v0 T. x+ |6 j, T modelSchedule.at$createAction (0, modelActions);
" Y* R$ h: K" I. n; D ! i: U) q- a9 [# N) l7 c, R
return this;
" F: k( E. ] z2 V3 R4 t } |