HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ N; }8 d& K8 T' e& E
. O( ^, y" L1 o) |! q' G) V' h public Object buildActions () {
, ~0 G0 n8 B$ x: o" _ super.buildActions();
& A: R9 h+ t! K0 E; L) I + R1 N/ f5 U6 `: V3 H1 j% O
// Create the list of simulation actions. We put these in- G; ]$ N& H& @2 P" ~
// an action group, because we want these actions to be& F" i1 F) ^9 l4 h) `$ c9 E
// executed in a specific order, but these steps should4 \0 k0 f8 j- @7 j0 k
// take no (simulated) time. The M(foo) means "The message
/ h: d6 g! d' Y J" N, V5 I3 C8 m4 | // called <foo>". You can send a message To a particular: \8 O( D) P$ x% e0 O- J
// object, or ForEach object in a collection.% g5 \# V- B# z9 v
, Z8 I5 ^, a4 K- {$ F* o // Note we update the heatspace in two phases: first run6 D# U0 I9 m/ G% R. W. }" G+ F8 X: m
// diffusion, then run "updateWorld" to actually enact the
$ T; j7 N- v/ U" [' e' l0 h // changes the heatbugs have made. The ordering here is3 q3 T# y1 U9 `( C2 g
// significant!8 a3 `4 a- X7 e- l6 G$ b
{: s# A' x# q5 m
// Note also, that with the additional
+ c2 K1 L& `1 h8 y u // `randomizeHeatbugUpdateOrder' Boolean flag we can" i' n! g* U1 D+ u9 `, Z
// randomize the order in which the bugs actually run& \3 b) q! N! `/ z
// their step rule. This has the effect of removing any
( U, _1 H _- D( |" @4 g& _ // systematic bias in the iteration throught the heatbug* F$ U1 O' ?: T, ?$ Q' m, r7 L$ F4 J
// list from timestep to timestep3 d# C, w8 K6 m! K( c# L0 U
* _: T6 f7 E# t* i! r; w
// By default, all `createActionForEach' modelActions have
* o7 L" N$ y: ]' [1 A$ @ // a default order of `Sequential', which means that the$ g. Z8 z2 L. i l- A
// order of iteration through the `heatbugList' will be
7 X N' E; P' Q( {( v // identical (assuming the list order is not changed% X4 ]& }' [: w3 j+ y) u3 n
// indirectly by some other process).4 s3 S$ ]6 g L; R
9 c ^+ U0 U. p6 Y( R3 W5 C
modelActions = new ActionGroupImpl (getZone ());8 C& M4 ^! o' ]; i+ L) s
5 o4 `9 h8 ~1 E8 j
try {
' z% {# R: v( O8 K9 z* _5 c' S modelActions.createActionTo$message2 N2 M' U' n8 b# S
(heat, new Selector (heat.getClass (), "stepRule", false));
% e l, B! N& O$ @7 j } catch (Exception e) {# I% _, V8 a" w+ D( S- z
System.err.println ("Exception stepRule: " + e.getMessage ());
# I3 c6 w) A# h+ r7 |) p u }
$ p! J j# {% |
( F1 T1 }& S% o( D; M, J try {
2 n u5 s: n! X' W' o" Z2 }' e' S8 s Heatbug proto = (Heatbug) heatbugList.get (0);
# S) O! p( }; \ Selector sel = b7 {- E s8 j" l
new Selector (proto.getClass (), "heatbugStep", false);% d8 L V, A( h% V* `8 h3 F: h
actionForEach =
i% t( |$ G/ c* {0 e modelActions.createFActionForEachHomogeneous$call
" C, \/ I9 N) m: q (heatbugList,
- P& N! e* o, F# C3 p new FCallImpl (this, proto, sel,
& g) W( y7 C, p3 V new FArgumentsImpl (this, sel)));
8 Y4 Y2 x7 P: k! @* R8 W) p1 m } catch (Exception e) {
) m5 f! d7 J% w% i e.printStackTrace (System.err);& i( l [8 e! a4 A' T
}
3 c' i; k: ~2 ^3 T; a% i9 Z3 ` + B( {7 ?0 [2 `/ o6 G
syncUpdateOrder ();
' h, F8 s( {& a' Z. O0 u6 T) o$ k% h- J9 u# W3 Y; `
try {3 c; D) b( V o# u
modelActions.createActionTo$message
! N# f7 y! o4 O! J6 h$ t& H (heat, new Selector (heat.getClass (), "updateLattice", false));0 T4 }2 {+ O* a
} catch (Exception e) {
* M) a( j9 z+ m" K# G' ~& i/ V System.err.println("Exception updateLattice: " + e.getMessage ());
# K, S. {8 _% S9 n# d }2 _( c0 D1 A/ o
) D- x& o1 y- _! ^+ X9 b5 [ // Then we create a schedule that executes the3 R* [* n4 Q8 l
// modelActions. modelActions is an ActionGroup, by itself it
7 ?/ a) j( Y0 ]( i# A- |7 s // has no notion of time. In order to have it executed in' t' I, k( _, t6 R( x3 X7 H5 S% u0 w
// time, we create a Schedule that says to use the
! f1 L9 w7 u8 |" T8 E // modelActions ActionGroup at particular times. This
& `; U C0 w/ [3 c. | // schedule has a repeat interval of 1, it will loop every L, o$ b8 Y5 n" g6 M
// time step. The action is executed at time 0 relative to
- T# E( ], ?4 `$ L$ `! \8 ^ // the beginning of the loop.' _' K- J$ e. c
! T5 Q: }- N, O2 H
// This is a simple schedule, with only one action that is
1 k2 ^; `3 Y/ ?# P // just repeated every time. See jmousetrap for more
$ r) Z3 {; {# x8 S // complicated schedules.
5 v% v) p5 O. q$ n5 X. P- Z, S- \ Z 7 Z$ U U2 D6 b$ B1 u
modelSchedule = new ScheduleImpl (getZone (), 1);2 i* v3 N' c- t2 \4 Q& ~
modelSchedule.at$createAction (0, modelActions);
8 S4 M! |4 R# x+ z3 ~% }
- C6 W2 q3 k, h2 n* ] return this;
, p- f" |# W$ L7 i: ~# O } |