HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. ?4 F5 H& L% |- ~1 S7 m* f4 S8 R! M% W3 W# ]3 O3 x9 u0 \
public Object buildActions () {
! V$ w) a* v% Y6 p9 v super.buildActions();, ]1 l7 @: F+ O; z) s( `* k/ r
( b! y1 {0 @7 v' h // Create the list of simulation actions. We put these in) K7 ~+ w7 O4 |0 _( ~1 `2 L G- u
// an action group, because we want these actions to be1 t, s' F9 _( P* L7 F
// executed in a specific order, but these steps should9 d/ j7 u1 D X& X u
// take no (simulated) time. The M(foo) means "The message
6 N4 l6 |: K. N% t' }4 G" n // called <foo>". You can send a message To a particular
: n$ X; b" p1 e! f& o // object, or ForEach object in a collection.! S/ M% \. `2 `" `
1 a2 M, `: `2 j% [9 x" c+ Y& u$ t
// Note we update the heatspace in two phases: first run1 {! A: I( S3 B" }
// diffusion, then run "updateWorld" to actually enact the# y$ z" R$ ^; a
// changes the heatbugs have made. The ordering here is# b& {0 d$ i% w8 {" x8 m6 C$ [
// significant!
( b0 u3 M5 J0 f7 U) Q& D- x 8 W* U8 J) r1 n7 J
// Note also, that with the additional
* [, X' a P# s9 z0 _8 ? // `randomizeHeatbugUpdateOrder' Boolean flag we can, x- D8 d8 `: Y0 ~ v, I
// randomize the order in which the bugs actually run
1 O( C! c1 V1 [5 w# v // their step rule. This has the effect of removing any9 L/ N8 F2 k4 f) x
// systematic bias in the iteration throught the heatbug
' F/ r' `( ^2 [& ~. J' j4 r" e2 @6 O // list from timestep to timestep
2 {( W- w6 V6 t) J8 J
7 R0 c9 t+ N8 `) Y2 T3 F // By default, all `createActionForEach' modelActions have
0 I+ P: ]! K8 X$ R // a default order of `Sequential', which means that the' W5 V4 j8 y0 F7 v8 K9 U8 y9 i7 {
// order of iteration through the `heatbugList' will be# _+ [( g2 F& M V
// identical (assuming the list order is not changed
: S6 J# U- T) y) L$ N // indirectly by some other process).
9 W( \1 h1 p7 E
9 Y2 a* u) [4 m$ F, \ modelActions = new ActionGroupImpl (getZone ());6 ~' _+ r) V+ E8 y. i( r2 a) I7 ?
6 v: Y8 T3 b, _; h/ ~8 G try {* i# ]" e, Z' L) z# k
modelActions.createActionTo$message$ L' q' k8 V+ O& ?
(heat, new Selector (heat.getClass (), "stepRule", false));3 S+ Y) U G* P6 W( w
} catch (Exception e) {
3 H7 M4 G; v" J8 H/ k System.err.println ("Exception stepRule: " + e.getMessage ());
) W9 T9 j8 P' t6 ]( z }
. ~# ^% r# N+ `( |8 `* c6 w j; P$ `5 Z. E5 J3 S" O, Q! o3 ^
try {
1 E7 A# ]1 w; L Heatbug proto = (Heatbug) heatbugList.get (0);
2 g- X- C$ o! p) i* f Selector sel =
" O& m. _3 n: W+ I6 F; f new Selector (proto.getClass (), "heatbugStep", false);
4 w7 n4 I* ~! }! l actionForEach =6 P1 s9 A f) R+ F
modelActions.createFActionForEachHomogeneous$call. z. L8 ?! m2 p# M# K. [
(heatbugList,2 q2 j- u9 F6 r7 i5 R0 S8 c3 J/ f
new FCallImpl (this, proto, sel,' U2 a+ Y, A1 }7 V# G0 k% |$ T( Y
new FArgumentsImpl (this, sel)));; H0 _4 K) n" N
} catch (Exception e) {6 f6 N0 d; ~3 y, c. _4 Z
e.printStackTrace (System.err);
+ {9 _( ^: G! }$ H }# P5 O! n Y" W. _5 X' X) t. a5 ~
+ S& R# [/ d. Q1 p' d' `8 r& {- c U+ n( { syncUpdateOrder ();
4 j$ v, [' c9 T b. i0 L
+ p9 N& M4 ?* ?, ? try {4 Z! K- J7 a! V: u0 t2 A
modelActions.createActionTo$message + e, @# }, ~1 b7 _( k
(heat, new Selector (heat.getClass (), "updateLattice", false));0 F$ D+ C. L. ?9 D1 w! `
} catch (Exception e) {
P2 l: \% Q1 I+ k& k$ X; G System.err.println("Exception updateLattice: " + e.getMessage ());% s% T/ {0 b2 e: q
}) w( J) o" [2 c
8 w: D, a% X6 `; T C
// Then we create a schedule that executes the
S- q$ t1 F6 J) _1 D! r // modelActions. modelActions is an ActionGroup, by itself it+ F' p, t" {- K. }3 d+ K
// has no notion of time. In order to have it executed in3 Z/ y- V/ S/ \0 P, f# U9 o8 w# O
// time, we create a Schedule that says to use the
* [- s; {) W, I) { // modelActions ActionGroup at particular times. This. {0 u2 O# q7 m- W: r' x' U
// schedule has a repeat interval of 1, it will loop every
! E* D# P$ N2 \ // time step. The action is executed at time 0 relative to
2 @: ~& q# Q; l2 E% j \+ U // the beginning of the loop.# \5 z! \% D7 ?
0 |2 F4 b0 r( Q! S/ i* ] // This is a simple schedule, with only one action that is
: Z) V. O$ ^& Q l1 w. \ t: M // just repeated every time. See jmousetrap for more6 W0 i1 u2 G0 A7 ?$ q
// complicated schedules., v; D4 E+ p% m R& D. x
6 q" z3 A8 g* w2 z& q! `' H
modelSchedule = new ScheduleImpl (getZone (), 1);
* x1 {+ X2 b8 F3 k! ~ modelSchedule.at$createAction (0, modelActions);6 H3 y/ E. M5 n: Y1 c
. l' f9 ~0 c& O- x( ]( e, O return this;
/ }2 K4 F0 l6 G) K; i" E } |