HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* x# m6 {' K" ?; E+ {
5 c6 x2 \, ^# C. t# l public Object buildActions () {
# l! s- _, w C; {% I super.buildActions();
' {; b/ T' I0 V' x( ?7 v
, J( s; v3 ~ n% q i% u // Create the list of simulation actions. We put these in4 b7 { j0 V5 O1 N
// an action group, because we want these actions to be$ Y7 u8 F8 ~" s
// executed in a specific order, but these steps should9 N; n3 q+ \, f# z
// take no (simulated) time. The M(foo) means "The message
5 ?8 d) e9 \: V" H9 a* t& @ // called <foo>". You can send a message To a particular
/ G# v h0 J0 d) C4 o4 N5 c# z' X // object, or ForEach object in a collection.. Q3 v1 n3 k# g5 H
% p; C- D7 I/ M1 N/ {! v // Note we update the heatspace in two phases: first run
) Z$ D0 Y/ }" v1 J2 W" U( P9 a3 _ // diffusion, then run "updateWorld" to actually enact the ]; \2 i4 y8 Y( P
// changes the heatbugs have made. The ordering here is
( [$ o* i9 h2 l b3 K- t // significant!- @9 U n% ~) M( l K5 b8 [0 M7 T: J
. v% b- ?& t2 K4 T5 Z
// Note also, that with the additional
; v2 i' i( [* r# \+ t4 P5 H% o // `randomizeHeatbugUpdateOrder' Boolean flag we can
! |. S: p, u( H `; c" x% z& |8 k* T3 v // randomize the order in which the bugs actually run& x$ l# I! |7 V
// their step rule. This has the effect of removing any
8 l" x' J: ^/ } // systematic bias in the iteration throught the heatbug
: p( I7 g$ f7 e; K" U- s, j' s // list from timestep to timestep' s$ t$ M4 a* E
3 G/ P& q" l' i1 U" g( b# l* \" |
// By default, all `createActionForEach' modelActions have
( C$ F8 e6 l" b. j // a default order of `Sequential', which means that the
( b' Z" n0 V' B1 u! a // order of iteration through the `heatbugList' will be, r' a5 ~5 y, V
// identical (assuming the list order is not changed$ K# R' M) ]" X
// indirectly by some other process).# d' i( I: V4 r9 w* g Q( y
' ?( M& U* i0 |/ i
modelActions = new ActionGroupImpl (getZone ());# T- X, |+ {5 |- T& n( M0 E' `
6 }0 U1 Z; M2 _# e try {( \) |+ u7 k p9 \6 k/ I
modelActions.createActionTo$message
0 \+ B& t# w/ y* j4 [! h# ^& u (heat, new Selector (heat.getClass (), "stepRule", false));4 T/ P9 m j4 r- q0 {* G
} catch (Exception e) {9 R0 { m0 b# K; m# P
System.err.println ("Exception stepRule: " + e.getMessage ());
: ?1 O+ N9 L. ~ }* z4 E3 n0 S5 N
( w+ Y+ c: I# q& @: K: |# G% d try {6 h% |! _5 x0 D2 X2 W Z$ d
Heatbug proto = (Heatbug) heatbugList.get (0);; M. Y, X. i: A7 a$ G
Selector sel =
0 g5 c- B- F+ b$ _9 A new Selector (proto.getClass (), "heatbugStep", false);- ~6 V" Y3 Y5 O# Q% O$ m2 G, j) @
actionForEach =
$ \5 U" I5 a" y9 `' ]* P modelActions.createFActionForEachHomogeneous$call5 \4 G+ ~* J- U$ z- E: e
(heatbugList,
: y# `5 ^1 R' n0 f: f new FCallImpl (this, proto, sel,2 b; L2 g2 ^! l! W" c7 i n2 M
new FArgumentsImpl (this, sel)));& R: B# m1 J* `% l; ~' ^
} catch (Exception e) {/ ?3 R0 G9 w6 B4 j+ T
e.printStackTrace (System.err);5 L' U/ h( v! x7 J5 p
}
1 ?/ g1 \( [5 s
, x/ W2 _( |8 [6 l4 t syncUpdateOrder ();
/ M9 e) Y5 O# y# W3 i) u" U7 S
" [9 T# ?9 p% S" Y% d u% |: B try {3 w7 b. h8 C) |
modelActions.createActionTo$message . ^8 X3 |6 G7 \7 f5 p
(heat, new Selector (heat.getClass (), "updateLattice", false));9 X0 q) E8 t3 m9 M
} catch (Exception e) {2 l, A ]1 a8 f+ s4 R4 C' z! o
System.err.println("Exception updateLattice: " + e.getMessage ());
- N- g _7 ^7 F) E; x) K* j {0 r }9 {) l* `" T' B0 J7 ^# M( l
5 `9 G* ~ J/ m. |- l // Then we create a schedule that executes the& H- t8 }, L" z6 b$ F5 r/ c
// modelActions. modelActions is an ActionGroup, by itself it& A, U0 M+ @( U9 j: x5 m
// has no notion of time. In order to have it executed in. K! N1 u R8 ~6 {1 r
// time, we create a Schedule that says to use the
% T0 y1 U7 `2 t8 N% A- \" ? // modelActions ActionGroup at particular times. This; w: ~& J9 f8 k3 J! E
// schedule has a repeat interval of 1, it will loop every# {, v8 n, P: _) R" f8 Y Y( Y4 N, n
// time step. The action is executed at time 0 relative to
G3 O$ e" d* }( ~ // the beginning of the loop.3 v6 ^/ x! u7 Z/ c
6 S$ W& F0 u4 h j( o& W
// This is a simple schedule, with only one action that is- n) Q' L0 g2 i9 R7 [
// just repeated every time. See jmousetrap for more
, b8 W8 s. s2 b // complicated schedules.
- X9 R8 }2 V! M5 W2 ^
( [7 W) C$ y3 k$ Z( G# d$ ` modelSchedule = new ScheduleImpl (getZone (), 1);0 D) x; R- K6 S l% ?/ e! Q$ Y$ e
modelSchedule.at$createAction (0, modelActions);* y, S9 d) c' l$ h4 h
- j4 n: S& [# }7 Z2 F9 v% g
return this;
7 o/ D) I2 z/ z1 `5 l } |