HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 G) U( h) g0 i' h6 V! p: K% K. N- \% o" G) N& w/ L
public Object buildActions () {
i% _1 J2 H" f& I, f# u- u9 D super.buildActions();5 K+ g# h! W, a/ o' o
0 k3 W) z: U, G! t. U- g' c. T- `
// Create the list of simulation actions. We put these in w) M0 }- E+ ^# o
// an action group, because we want these actions to be" \9 e# K+ p- g
// executed in a specific order, but these steps should2 G; t& O& Z4 H$ @: c1 w; ?
// take no (simulated) time. The M(foo) means "The message; {# I0 q% l9 n
// called <foo>". You can send a message To a particular
6 L4 d+ B: N: d% Z // object, or ForEach object in a collection., k; v( S3 S" v, g8 O, p. o
( t* U% [) o% I3 a2 p! x% p2 C( f
// Note we update the heatspace in two phases: first run+ O/ x4 \0 @" j: d
// diffusion, then run "updateWorld" to actually enact the
+ z$ ^' o2 B6 x1 z2 G // changes the heatbugs have made. The ordering here is
* d% ^$ s# y! A8 K6 [ // significant!
- r- E' o- a4 A5 j3 O9 q ( F( o8 p* w) [- R' Q
// Note also, that with the additional
+ R- V! K+ `1 u0 r! w4 { // `randomizeHeatbugUpdateOrder' Boolean flag we can5 @+ G& \& Q( V. u: |! J
// randomize the order in which the bugs actually run# B4 T4 z8 ]; l- a+ k' g+ d
// their step rule. This has the effect of removing any
6 e) L2 [5 `7 V" [. h0 H6 d2 c7 D // systematic bias in the iteration throught the heatbug- @; r2 V% _: c& O' m: n
// list from timestep to timestep
, p. M/ x' ]3 ?% }4 b
1 O; I# a0 F9 J2 t d9 e# N // By default, all `createActionForEach' modelActions have
* V9 I$ d5 L, j& ?9 y // a default order of `Sequential', which means that the6 _3 ]: [6 k9 j$ b
// order of iteration through the `heatbugList' will be3 R; }2 e1 o! _, }: M% g9 K2 B
// identical (assuming the list order is not changed
2 c- u g& k' a$ f // indirectly by some other process).
1 x% H2 J) r& W( u ; l; m& _5 u8 v9 @/ S
modelActions = new ActionGroupImpl (getZone ());% i; |& Y0 H+ l+ g/ Y* [
% s9 V7 a$ [1 ?; ?
try {
2 d1 H) H7 H% J- t" \' n1 G4 | modelActions.createActionTo$message% K% W5 G# q9 n. z/ Y& b0 i$ {
(heat, new Selector (heat.getClass (), "stepRule", false));9 p. L1 T# X, \: D' _
} catch (Exception e) {& N6 d( z) p; L S( m0 m+ j; T/ A. ?
System.err.println ("Exception stepRule: " + e.getMessage ());/ Z6 P! I8 d! T/ j2 p
}, u n8 E, A, j$ n% }. K1 O7 S3 m
+ m9 C; X0 P( `8 [* n% ^( V
try {
+ n4 R, y7 V4 \" A! O Heatbug proto = (Heatbug) heatbugList.get (0);
# O+ w& n) X2 G( m- |: S Selector sel = $ ?% H1 i6 \2 m* Y
new Selector (proto.getClass (), "heatbugStep", false);3 H P2 b1 f+ K
actionForEach =9 e$ q, n: }) e3 M6 \
modelActions.createFActionForEachHomogeneous$call
9 F9 C1 H! ]- L7 s* X0 R6 A# {# S& m (heatbugList,% N! R0 ]! |( b+ m0 K" N0 `2 x! [ g
new FCallImpl (this, proto, sel,
2 }0 i4 {% t& O) g new FArgumentsImpl (this, sel)));; n" m0 A+ p$ b
} catch (Exception e) {! D `3 n' {+ o) l) I; Z9 w
e.printStackTrace (System.err); {, |/ H4 _. G1 [% h( Q
}" F) N, r5 U7 m' V4 W8 M0 w' d
) J' \/ ]5 x& ~1 ]0 h* w) c) W7 K
syncUpdateOrder ();8 n" _% f7 e- s- C$ e2 z) ?
9 D0 N& }. o$ H) y try {
' j* Q- R$ a. b" ?& c modelActions.createActionTo$message
& _0 d q8 t' v) h" k. L3 V6 I (heat, new Selector (heat.getClass (), "updateLattice", false)); E7 w7 B7 @4 n y) [7 ]1 q X
} catch (Exception e) {' _( a7 f3 W3 D+ D' y, _# i% u
System.err.println("Exception updateLattice: " + e.getMessage ());5 p, k+ s9 j4 j, k$ F' g& P6 K
}
: y8 K: R; W! d% @' K9 A6 j: s # I- F; ~8 f2 M9 p7 f# R2 e4 P) u$ U) }" e2 F
// Then we create a schedule that executes the
% I% A: R5 T% ~* Q+ l) t // modelActions. modelActions is an ActionGroup, by itself it$ D; z- S! U1 X# V6 J$ D5 V6 q* t! D
// has no notion of time. In order to have it executed in1 l F* v3 l0 X: j# j
// time, we create a Schedule that says to use the* y/ q: A" x7 x6 S1 Y* b
// modelActions ActionGroup at particular times. This
/ M7 j. v' d( w' B6 F // schedule has a repeat interval of 1, it will loop every
, G- d, z0 v8 p: D8 C // time step. The action is executed at time 0 relative to
0 U4 e: N5 ]; s9 o6 z- y // the beginning of the loop.
: f+ P; [! d2 w; n6 |1 y. W2 W# U9 C( ^+ S
// This is a simple schedule, with only one action that is' P* C; c+ \; [6 y4 D, q0 z
// just repeated every time. See jmousetrap for more
7 |9 Q. x9 i# `- ?8 K // complicated schedules.
+ q% U* i4 i. _+ K& c3 T
! }2 V7 ? `- Y" F a0 T( V; }* K modelSchedule = new ScheduleImpl (getZone (), 1);# C; s) B4 {" d: h: d% b$ U: q) n
modelSchedule.at$createAction (0, modelActions);
9 [) E/ r$ W; I+ h) r4 T/ h
& V1 S$ {6 q$ u# P& Q- \* y" x3 d return this;1 r- c1 A. g: d. @4 E
} |