HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' g8 I s6 i1 ]0 [% w2 p
/ @3 a' U3 N7 K3 j ?# e& Y public Object buildActions () {
5 k3 q3 I% ?6 l9 P super.buildActions();
+ y6 \3 g& ^: B* U* N- a4 ? $ Q" v: @& \% x7 V4 M
// Create the list of simulation actions. We put these in
' i( j' ^; l# Y, S1 R& _$ v+ R! a$ U // an action group, because we want these actions to be
6 }8 S: F5 Y% V: r // executed in a specific order, but these steps should
+ a9 K0 r$ X) K // take no (simulated) time. The M(foo) means "The message
9 s3 O" Z+ O* d3 B* R // called <foo>". You can send a message To a particular
+ ~) ~% H# Y C // object, or ForEach object in a collection.
! ^* O8 X8 p0 E' I4 X* b( m5 a. o7 j& ` " t0 L$ X/ R+ r3 C! Z& k
// Note we update the heatspace in two phases: first run8 h* K5 |" k [- r( v: D" t
// diffusion, then run "updateWorld" to actually enact the/ F! Q8 Y; r4 w. q6 ], D6 r+ [) y
// changes the heatbugs have made. The ordering here is5 l4 ]4 T5 D9 t' B
// significant!5 s# T4 }; N! n; P
1 T+ K. L3 T$ p4 T4 }" t // Note also, that with the additional' u8 E% D* T2 Q4 o
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 V! r! P! H9 q1 q6 g5 w- E6 \6 G // randomize the order in which the bugs actually run
+ j6 H' N n' Z' a4 K // their step rule. This has the effect of removing any
5 Z% m( E8 R; a# q2 @ // systematic bias in the iteration throught the heatbug
8 P! p$ y9 a6 g1 g g0 |% x8 [ // list from timestep to timestep
5 h8 B/ y/ P7 Y" Q , C" ~6 w' `2 r1 D' |: [. t
// By default, all `createActionForEach' modelActions have# u! T# r6 d1 V: L S3 S" z, H
// a default order of `Sequential', which means that the
8 \ C& \' k' b; x! t: O // order of iteration through the `heatbugList' will be" n3 M% z0 d2 a- E3 A! |' k$ U
// identical (assuming the list order is not changed7 w$ Y7 ? I8 L& G
// indirectly by some other process).
9 g" X) g) S( ? & A- ~& w9 i$ L/ s! ~
modelActions = new ActionGroupImpl (getZone ());
9 n3 w. @9 [/ T W! X& X) T: ]. Y' U) e; s- S: h5 r+ X f
try {" H* I; E& ^+ p$ j7 q
modelActions.createActionTo$message
) z& f% d1 M3 ?" G& f/ V (heat, new Selector (heat.getClass (), "stepRule", false));7 T, F0 j, F, L! ?$ L8 @, Z @, e
} catch (Exception e) {
8 [( C# Y# g. T& P5 s6 `# [7 Q System.err.println ("Exception stepRule: " + e.getMessage ());
6 K- d0 E' n" j' u' ^ }, {8 r- Q! I: t9 {
7 j r+ q1 I: T& b7 Q# P
try {/ I* O& K3 P& P2 ]( E
Heatbug proto = (Heatbug) heatbugList.get (0);
6 H/ G E# b" Q5 t( W7 [ Selector sel =
7 W& m9 L4 o# M( w* l4 c new Selector (proto.getClass (), "heatbugStep", false);" i+ T/ o8 A$ e! A: l1 [
actionForEach =' p- Q, y+ u2 \, k! T% e% f
modelActions.createFActionForEachHomogeneous$call
! M3 _' [% l2 U7 | (heatbugList,9 Z# h9 }3 m1 i: |
new FCallImpl (this, proto, sel,+ D; @: }, c4 ]1 i8 v) ~
new FArgumentsImpl (this, sel)));% D$ y; C* F. A
} catch (Exception e) {
$ J* Y. u0 e5 [8 T; t. F8 T e.printStackTrace (System.err);8 \5 }! x4 s! n5 A
}% \) }# I: L- U8 P
2 L0 F$ S/ }8 Q7 c
syncUpdateOrder ();$ U; u: m" O& T8 x H' e
* G; Y8 E& b8 Q, H' i2 s try {* |8 W0 Q, V/ F
modelActions.createActionTo$message L4 w" z+ I% _& j# A W! t+ g5 L
(heat, new Selector (heat.getClass (), "updateLattice", false));2 d: q6 |3 m4 L2 M0 R b' y
} catch (Exception e) {1 X$ C5 P- J# T4 A' _# a0 v
System.err.println("Exception updateLattice: " + e.getMessage ());
& E0 n* ]2 e+ [% Y" z( t }+ E5 [# @2 a2 l* w+ ?4 r
% }6 c/ d; ?/ a l% X# y // Then we create a schedule that executes the
$ q% j( [. H3 q F# R* b( l; O // modelActions. modelActions is an ActionGroup, by itself it
" d; v' { d3 r. \5 r" e) ` // has no notion of time. In order to have it executed in' Y& \/ S* Q4 c' A8 m; q
// time, we create a Schedule that says to use the
( y# o T" l5 M7 z* I+ u // modelActions ActionGroup at particular times. This
+ z3 H9 x* K- v9 a- Y0 { // schedule has a repeat interval of 1, it will loop every
+ d0 K! {4 r# S7 `' C' d5 w // time step. The action is executed at time 0 relative to0 O& g( b( Q( y2 p) d2 T& j7 {
// the beginning of the loop.5 D. R0 v. q! B# l; p D
& S# h3 k' ~- s( ~" v2 H; j% [+ p
// This is a simple schedule, with only one action that is" P3 Z: r+ i- }% i1 N
// just repeated every time. See jmousetrap for more& h3 C4 x/ M- h; g
// complicated schedules.7 Q( d2 Z' D/ b t
/ Q4 q) g+ H: Y u8 j. y- ^* { modelSchedule = new ScheduleImpl (getZone (), 1);
, z3 J+ Q7 e6 H0 k modelSchedule.at$createAction (0, modelActions);( B+ ~$ {2 F$ q6 {/ j" `
$ a/ x: U0 g7 v: O7 g+ w# t
return this;8 C& ~# o; O9 K4 M% ^$ D8 r! I
} |