HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* w; c& ~, x T0 P- [0 Z! j9 D
2 k$ D- @8 e0 P7 s public Object buildActions () {( F; d# e0 }; {
super.buildActions();; I8 j' e, `' t' W& k) j" r$ @
. V* M+ v* ?* z // Create the list of simulation actions. We put these in
7 m5 Y4 c' {* [: l+ Z3 W // an action group, because we want these actions to be1 ~* i0 K( w6 Q, G" X3 q* k
// executed in a specific order, but these steps should* P+ t# H: g" `; n0 S' j
// take no (simulated) time. The M(foo) means "The message
& Z! q+ k& v3 ~3 z3 x6 ?+ {0 I // called <foo>". You can send a message To a particular
4 B% F x! F A6 [ // object, or ForEach object in a collection.1 ^& O& S5 a9 `- ^: `' E
' U- N( i4 D) R2 \$ r' n5 ~
// Note we update the heatspace in two phases: first run
# d" \% m! n; d7 _- ^& ~ // diffusion, then run "updateWorld" to actually enact the
2 V. q% \# y+ @. y3 p6 j, \5 q // changes the heatbugs have made. The ordering here is
! w7 E" o$ T/ a3 i$ ` // significant!
8 T& \) t) S* L& O # W6 u7 N: y8 l9 z7 K
// Note also, that with the additional
' k) [' S+ ?# C: L4 n5 B7 F9 O // `randomizeHeatbugUpdateOrder' Boolean flag we can( ^) o3 W* R( `
// randomize the order in which the bugs actually run! Q- H6 r- k3 f- g) k$ X
// their step rule. This has the effect of removing any
5 S8 @% Q7 r- {) k" m // systematic bias in the iteration throught the heatbug- J& C$ u$ C; U2 |) ]
// list from timestep to timestep7 J. ~; T3 y( o. [9 r3 _0 ]6 ^2 [
% q& Y6 w& B# k5 D" o, r; q! c
// By default, all `createActionForEach' modelActions have
9 ~. J& n2 Y. [ // a default order of `Sequential', which means that the
% J* t R, L- ~/ L // order of iteration through the `heatbugList' will be( `8 U# B4 {2 M5 U) J$ \ N
// identical (assuming the list order is not changed
; `% z' L4 _# f P. ]# c/ ? // indirectly by some other process).
9 j6 l: }, X' X+ @+ z$ t l
. j) R& q' B/ T modelActions = new ActionGroupImpl (getZone ());6 k6 R$ ]+ o2 w4 `! n9 S
# }. Q/ u8 T( g( k: G# {9 p4 z
try {0 B5 I* [' P$ L
modelActions.createActionTo$message
" c6 o: }8 ]4 |6 T8 E/ b5 U* R( G (heat, new Selector (heat.getClass (), "stepRule", false));/ r' ~+ K1 F* u: v; H
} catch (Exception e) {7 {* G8 G% w6 c4 x( S
System.err.println ("Exception stepRule: " + e.getMessage ());
+ z [# x) `' m: Z9 u }
7 M% [& n! O/ _6 S) t% N( r# Y+ W: R
try {
; F. ~4 R2 |5 c: q4 I/ R Heatbug proto = (Heatbug) heatbugList.get (0);2 _8 a5 y& C8 ]! I3 M7 }
Selector sel =
( d i1 J) a3 H: t( @* ]8 \( Y9 h# ` new Selector (proto.getClass (), "heatbugStep", false);
# s `4 g& H h% Q actionForEach =
0 B# e7 f* n, C- w4 }6 O$ ]+ D& K modelActions.createFActionForEachHomogeneous$call) n0 \5 n' n/ r. ]
(heatbugList,6 P9 k, ^4 ? \- A
new FCallImpl (this, proto, sel,
6 e3 O+ U3 a Z& P* Z3 k new FArgumentsImpl (this, sel)));) ?5 X* q# q; i6 ]7 d. D: B
} catch (Exception e) {
n' _3 c2 l- J, n& O W e.printStackTrace (System.err);8 H) S0 Z' S: |! O. t4 C C: W
}; X" a) d) s( i- y. i' [1 D
. D6 e' \" s1 v% C: B1 {% x; [ syncUpdateOrder ();
, U: ], @' t# R {" K" w; k, K7 B* m) ]8 k) ]
try {
$ V0 d' c3 F0 C! h/ ?4 ?" k5 F modelActions.createActionTo$message ; |) F1 I0 u6 Z- S0 k( {
(heat, new Selector (heat.getClass (), "updateLattice", false));# p! z% y% u( w6 e3 ?: d
} catch (Exception e) {
9 y; R& m5 Q2 y6 G9 ~ System.err.println("Exception updateLattice: " + e.getMessage ());2 a# o5 d! O3 d% c0 W. l7 R+ n
}
! W! t/ h2 F# n$ R9 ?: b5 ~ 0 A, C* M# y1 m9 y- ]( H" E
// Then we create a schedule that executes the8 t3 Y! P! i4 x' p2 s3 p
// modelActions. modelActions is an ActionGroup, by itself it! _$ |! l& } v( A7 ]
// has no notion of time. In order to have it executed in
; w+ s; I9 Z& r/ Y$ W // time, we create a Schedule that says to use the7 G: A: K( r' o
// modelActions ActionGroup at particular times. This
8 H% J7 R% M$ H) t9 S# p // schedule has a repeat interval of 1, it will loop every9 x. ~, I) ~) M& z% d
// time step. The action is executed at time 0 relative to
1 U. L2 _9 q$ L% X // the beginning of the loop.1 d, u: w# C5 f e
) r. Y9 T( ]: n8 ^5 D5 n
// This is a simple schedule, with only one action that is `3 r" n# H6 v# |; C1 ?9 z
// just repeated every time. See jmousetrap for more
- d, F/ U& W6 {" V9 _$ M7 J. O0 e // complicated schedules.
& h# Z) s! r5 a 9 L y8 d1 Z! v; G* f5 @. ?
modelSchedule = new ScheduleImpl (getZone (), 1);
+ v# b. y! J' z6 I' K4 e" G) T3 I modelSchedule.at$createAction (0, modelActions);( P g- p3 L ?" \8 W
; ], s8 ?& Y) s' q return this;
7 H+ J: G8 @, n7 d# ^- s$ A" p } |