HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* X$ N( `; p* w5 h
: |$ m7 J. ^9 J: z public Object buildActions () {, m. P* N: \' |) ^$ d- y" x
super.buildActions();
2 S, r. x0 x# p5 o1 |. S5 o " }7 R; c2 O0 l" [ G5 h! t- ~
// Create the list of simulation actions. We put these in2 ^2 y. q, x9 T' c6 S% s
// an action group, because we want these actions to be
/ k6 |, R, |0 y p* o, ] // executed in a specific order, but these steps should
& _: J9 f; H6 v- b9 t# g9 i9 o* m // take no (simulated) time. The M(foo) means "The message
k2 f0 L( ^! E$ {2 f6 o // called <foo>". You can send a message To a particular
( d/ ^ H# @& A+ L; v* w; f // object, or ForEach object in a collection.
8 g# X. @! X; @ k' B9 B 8 Z# g, s- s2 h( A, X
// Note we update the heatspace in two phases: first run
5 ^6 e$ c( @6 e) F* Y3 _" x // diffusion, then run "updateWorld" to actually enact the
, S7 ~2 |$ y! Y% F& L* Z4 B // changes the heatbugs have made. The ordering here is' ~% y( S' a2 r/ s) L' \8 l
// significant!8 {) P$ n) C$ l- k
$ z$ ]% V( ^3 C j8 a3 O // Note also, that with the additional8 K0 O( u" k1 f
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ g, ^& G3 G( o2 w# G4 ?2 Z // randomize the order in which the bugs actually run
1 ^$ K7 s/ g2 m6 V" T+ O4 Q5 D // their step rule. This has the effect of removing any, z" J* K" d# O( C. C) K3 |7 b
// systematic bias in the iteration throught the heatbug4 y) V4 ]: y/ _6 R& J
// list from timestep to timestep
, X4 F" ~- F- @( g
, \; I* f( i/ j# X/ M6 U8 r // By default, all `createActionForEach' modelActions have
6 i+ V7 u5 w+ E // a default order of `Sequential', which means that the- O" ~8 d3 ]+ X. j
// order of iteration through the `heatbugList' will be/ o& ^5 c* e$ g& t' O7 h
// identical (assuming the list order is not changed- a# M; P1 g2 m6 x% t* E
// indirectly by some other process).! E0 l/ u' b: R/ u8 a
6 S: D2 {9 h( C modelActions = new ActionGroupImpl (getZone ());1 d) f% L7 D& N% J4 W
5 D- L# I; f( p$ ?' H0 U try {4 w2 u! L7 Q4 P% t! Q. j- G9 S
modelActions.createActionTo$message$ b0 R# L8 b2 R" a8 }# S- r! o
(heat, new Selector (heat.getClass (), "stepRule", false));2 i. ~0 l, g. |6 q. ?7 x8 z8 Q
} catch (Exception e) {
# e( s% `" N8 j7 o6 } System.err.println ("Exception stepRule: " + e.getMessage ());( O; J* i1 }9 L2 W* j; d0 g
}
\; x$ p5 U0 _+ a0 z/ b( U! E. q: _0 j: Y7 s: z/ C
try {# L; Q7 y9 ~6 y% N: J/ W
Heatbug proto = (Heatbug) heatbugList.get (0);! f6 U6 p( w. `2 f! T
Selector sel = . j! ?3 s/ m A) u5 L/ C' `
new Selector (proto.getClass (), "heatbugStep", false);8 S/ j# @8 A/ D& s- a% u
actionForEach =8 v6 z& _. y |/ |+ \* }* ?
modelActions.createFActionForEachHomogeneous$call
# z3 U2 S4 u, u+ |& ^ (heatbugList,4 U9 g* n/ @& o/ `6 O, K
new FCallImpl (this, proto, sel,) s2 L4 ^8 W# S M
new FArgumentsImpl (this, sel)));" P# v4 o# b* I" r6 N; m
} catch (Exception e) {0 n# f2 V! r5 j" n9 `/ \
e.printStackTrace (System.err);5 }- d* H c. d0 f) P' w- s
}
! F0 w9 v* k* u2 U% T2 t4 i2 {
" |* h, ^9 m" K1 u; x Y! A ~ syncUpdateOrder ();
+ B% x0 {- u8 _* H- o4 F5 j( r- ^3 h) i3 t$ `' }
try {
, P; D! K) F% ~) ~4 t3 b8 V modelActions.createActionTo$message ! u* R6 G% R8 v |/ I0 c+ q& Y
(heat, new Selector (heat.getClass (), "updateLattice", false));* N% R) N- S% _& A
} catch (Exception e) {: k4 Y6 _/ P$ R8 K. |0 F7 h
System.err.println("Exception updateLattice: " + e.getMessage ());
1 B+ O$ V( H/ ~- J6 j7 ~ }
) L: ^/ L$ R6 u; X9 ]; A, M3 T
, W/ H* R$ @- J9 @5 Y8 P T // Then we create a schedule that executes the! o" f7 X2 U) H5 f. S4 e
// modelActions. modelActions is an ActionGroup, by itself it
/ N" y7 Y# t* c // has no notion of time. In order to have it executed in6 \4 |6 ?' l3 }1 k( M8 k: ~6 F
// time, we create a Schedule that says to use the& Q2 k8 G$ i# a- n: V8 }
// modelActions ActionGroup at particular times. This0 |: D' N. | g6 S$ z" A; F
// schedule has a repeat interval of 1, it will loop every [8 J4 ~/ j( t) D! O
// time step. The action is executed at time 0 relative to
Z; \( Y; M. q! h // the beginning of the loop.5 F5 x$ B O$ K
/ d: @- `+ [! Q. T+ A // This is a simple schedule, with only one action that is
! ]; w% k* L+ a# o$ B) Z4 y // just repeated every time. See jmousetrap for more! G% V) ^2 F8 r
// complicated schedules.
) ^$ F/ }9 B- X, k 8 w, i1 A, Q' X5 a
modelSchedule = new ScheduleImpl (getZone (), 1);
: g: o0 B* E# L3 d6 a3 ` modelSchedule.at$createAction (0, modelActions);
3 A/ v g* ^( v- Y# ?, k1 y
& d* j' l% p& U9 o- D3 \7 x% X' ~+ t return this;3 w# n6 y/ o& D6 E
} |