HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' m& W! @! h+ t
" V: y0 ~# r9 T* q' l! i( o, A e& i
public Object buildActions () {+ k9 p4 H" b# J) v1 o# Z
super.buildActions();& B* O4 I: `! R! E2 x) R
8 G; X; ?4 }% @) @/ k // Create the list of simulation actions. We put these in
& y& V5 n! B2 V: z3 _, n3 p // an action group, because we want these actions to be
9 X1 i: o* \/ e$ r d5 C" G, L // executed in a specific order, but these steps should
, \, z+ V2 Y" o2 D // take no (simulated) time. The M(foo) means "The message4 Y6 }$ A# x$ u4 J& l$ F5 M! r
// called <foo>". You can send a message To a particular+ J; h" r- [2 u; l4 s
// object, or ForEach object in a collection.
- S0 i! M$ S+ w1 x1 e* C* `' E % R: q2 P6 k! t# E
// Note we update the heatspace in two phases: first run
3 x7 f8 B" x' y. a" U B1 G4 _! P" H // diffusion, then run "updateWorld" to actually enact the
9 N, G- S& ]1 H) D // changes the heatbugs have made. The ordering here is* P& |0 Y8 u) {& `; Q7 I4 B5 ^: {
// significant!
, T6 Y' F5 d$ n* v _- ^+ x$ P2 V
1 f# O/ \5 E v0 D/ G' `9 o2 L1 ? // Note also, that with the additional- P7 T* @7 V2 o* e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
* i7 u3 r+ N. n% n) f. E // randomize the order in which the bugs actually run4 D6 J$ G$ Q2 q$ j: Q) i: D8 h8 E
// their step rule. This has the effect of removing any9 X$ r3 @: j) s1 q8 D, o9 g
// systematic bias in the iteration throught the heatbug2 q4 z6 w9 Z( k) v( O; N0 D( B$ x
// list from timestep to timestep' s( S. d' r" }3 L% e0 J# H0 d
+ R* k) A% I: M Q: \+ T
// By default, all `createActionForEach' modelActions have6 p: h& ]- Y' E/ x4 D6 i
// a default order of `Sequential', which means that the
H4 p9 ^9 w0 x9 [ // order of iteration through the `heatbugList' will be
5 d, `2 A' W4 y/ c. p1 V, C // identical (assuming the list order is not changed, s3 i* }1 o0 u: Y K6 z
// indirectly by some other process).6 y4 Y5 e- s& L5 ]2 F7 O: G
$ l) m% L5 |$ i! X; O( B
modelActions = new ActionGroupImpl (getZone ());
! }9 D# w: R9 H& `" U# o7 \/ \9 J4 m
try {8 Z. F. n/ z1 x- h8 b9 n6 s" `1 O
modelActions.createActionTo$message
$ j# Z1 D6 _. R$ x: Q7 u) l (heat, new Selector (heat.getClass (), "stepRule", false));
' _# ^. n% ]; K$ z; T. s } catch (Exception e) {
/ j% t# v' a/ Q7 O0 o9 H System.err.println ("Exception stepRule: " + e.getMessage ());- f, t6 T6 k% B, X: X" u
}
; v; w- w+ N' }8 ~+ V0 z2 }* J7 u- @ q+ m4 F& e! |5 V
try {4 s6 i/ b+ t: F, D' m/ Q
Heatbug proto = (Heatbug) heatbugList.get (0);" h! q9 _8 M; i( g
Selector sel =
+ I# l3 C/ n' P. U new Selector (proto.getClass (), "heatbugStep", false);
% a, t' V* F/ [' `/ m! k' a actionForEach =
) }& _; ?4 J; g4 I" T modelActions.createFActionForEachHomogeneous$call1 l9 Y$ n; @: K8 H. |
(heatbugList," I6 A- a; Z: ^3 }& u( d+ z
new FCallImpl (this, proto, sel,: N" i2 A, p) l+ s9 P9 U
new FArgumentsImpl (this, sel)));6 k6 R' P! V, b" f8 q- p5 u
} catch (Exception e) {; s: [9 T5 l) d; b9 L V) A
e.printStackTrace (System.err);
9 Q3 t d* d: l }
8 b$ F8 U5 E# Y4 I
8 b2 v4 b9 z& l7 y& v" _ syncUpdateOrder ();7 b1 j9 I1 `+ |3 |! ]: L# s9 w$ u
5 S `8 b9 H& Q& {5 T try {
0 q9 t. p8 m. q, X9 n7 S- [- x modelActions.createActionTo$message % c- w4 f# w, D! J) ?7 V
(heat, new Selector (heat.getClass (), "updateLattice", false));) J O' O4 M$ q1 z9 q& n4 W( R
} catch (Exception e) { i0 v& h/ m- d5 p9 h/ p
System.err.println("Exception updateLattice: " + e.getMessage ());1 S- @0 m8 h# V/ F, M
}
# q8 |- N7 U2 C y8 w4 q" \# q; d $ Q# e: f$ d$ L$ v
// Then we create a schedule that executes the1 h: v; B3 E3 J/ K; Y/ u
// modelActions. modelActions is an ActionGroup, by itself it
: ]" U' {0 z, g S) C, ] // has no notion of time. In order to have it executed in
- Y* Q; T0 ^8 ?- y. N! S; C // time, we create a Schedule that says to use the& {* T2 Q- \ c! i
// modelActions ActionGroup at particular times. This/ R8 m' t5 }) j& R
// schedule has a repeat interval of 1, it will loop every
4 S$ v5 D1 K# y1 q+ o // time step. The action is executed at time 0 relative to
8 g) j9 Z+ N, p, B: t // the beginning of the loop.
, c1 Z r" Y1 S6 M/ S) _% l. X* ~
// This is a simple schedule, with only one action that is& Z# a: D; W- j, L9 {4 c
// just repeated every time. See jmousetrap for more
, U `& {$ X: @3 I // complicated schedules.
8 s1 n7 I4 V% Q 1 H1 W( A% ^8 {) V% A0 N& _
modelSchedule = new ScheduleImpl (getZone (), 1);
/ P9 Z6 V, }& K3 u# R( F$ d modelSchedule.at$createAction (0, modelActions);
6 L' {0 m2 n$ j
+ v- z( l$ z% b9 X return this;3 O+ W( ^* ^! f! F. d9 i
} |