HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ p( T' k- @8 R; G
3 K, ~9 _! ~, i9 b" J" } public Object buildActions () {
2 f$ }6 F, u, y8 v& S8 j% c Q: g/ i super.buildActions();
3 a2 m- ~8 O0 Y: [7 v% a # M& F Y: d5 A$ L/ Q2 Q
// Create the list of simulation actions. We put these in1 f5 n# x7 V w
// an action group, because we want these actions to be
/ h/ r- ?# i Q0 m: p // executed in a specific order, but these steps should
) ?% x& a3 s% [ t // take no (simulated) time. The M(foo) means "The message+ S, O+ q! T$ i9 p% p
// called <foo>". You can send a message To a particular
c m5 x ], ]& O: ] // object, or ForEach object in a collection.; U/ _! d5 H& w. d% d2 G
- m9 q2 Q: W# P- q+ ~, \, u // Note we update the heatspace in two phases: first run
# S; m+ I& g1 ~3 Z // diffusion, then run "updateWorld" to actually enact the
1 q$ O$ S9 M! W, {4 ~ // changes the heatbugs have made. The ordering here is
: Z* g+ w$ G5 z // significant!
" U; d# ?$ J; [* _ ; b' s% u; U3 Z
// Note also, that with the additional
7 a* q0 L! I; a `# a // `randomizeHeatbugUpdateOrder' Boolean flag we can
, J# g+ Z! z4 q/ a! \, v // randomize the order in which the bugs actually run
, p8 o4 r3 l% ?# V$ f // their step rule. This has the effect of removing any
" ^ ~$ _6 q, f* T // systematic bias in the iteration throught the heatbug" H' G1 L1 b0 j7 R6 D9 L
// list from timestep to timestep
: Y' {+ v( q: u, t! M& W$ ~' e
0 a% p8 Q% H, u8 Q, P. G // By default, all `createActionForEach' modelActions have0 K- T# B0 o( j( d1 `
// a default order of `Sequential', which means that the3 m. @/ }- T. K1 l# V
// order of iteration through the `heatbugList' will be
2 O( @2 s/ u) M! w" i // identical (assuming the list order is not changed( s l3 U h$ ^7 D8 Q
// indirectly by some other process).! I# U X9 G% l' s
" c: R$ W6 }' r/ O
modelActions = new ActionGroupImpl (getZone ()); K6 w$ [$ X' B% H1 S
5 `" q+ V+ O3 t) J5 G8 \" u5 c
try {
4 H2 k! r( w, |, q( W5 p modelActions.createActionTo$message
& b+ _; j1 }1 _/ h' A, F (heat, new Selector (heat.getClass (), "stepRule", false));
8 S0 p7 a* j/ [$ ?" M7 m- o6 ^) M } catch (Exception e) {6 r" o. I+ Q# U: o, i! P5 C1 J
System.err.println ("Exception stepRule: " + e.getMessage ());
9 T3 N0 |% l) U: [+ b) e }" G( }9 T6 J5 {% }0 L' \
- I! Q6 {4 |# G+ K try {
. m8 U' b% L5 \/ U/ I( g! ? Heatbug proto = (Heatbug) heatbugList.get (0);& U) D" U- {* E4 V% S4 Z+ _
Selector sel =
. h7 z+ R* } {/ u: H. ] new Selector (proto.getClass (), "heatbugStep", false);
9 V2 r) }" z |; }8 N actionForEach =% p% O/ m) e+ }2 @
modelActions.createFActionForEachHomogeneous$call) L3 X3 ^' V) t5 I. ~) X! T0 x+ \1 a
(heatbugList,
; a6 v1 D' D2 \ new FCallImpl (this, proto, sel,
: e3 L* Q9 v0 o, \ new FArgumentsImpl (this, sel)));/ K( `$ M, g3 x7 D3 Y
} catch (Exception e) {6 m+ e' u c: n
e.printStackTrace (System.err);! ?+ X/ ?8 W8 @* h9 H
}& i8 k5 b* A; V/ v2 u! n
3 t1 U& U& N1 ?% e3 w- N syncUpdateOrder ();; Z6 m" r z8 Q5 e
/ C' q' N% v) F& A8 K
try {7 p! k, [7 P: ?* n
modelActions.createActionTo$message
# } v6 K U S) ` (heat, new Selector (heat.getClass (), "updateLattice", false));
8 ^: q& B* ^- v7 m } catch (Exception e) {1 T2 A9 M* d$ x2 ^5 _% \
System.err.println("Exception updateLattice: " + e.getMessage ());
: W* J4 m3 D+ P& S1 U. b }! y" }7 B: D! D- a; y
$ K; D4 J* z }4 c0 b7 ~& O
// Then we create a schedule that executes the1 H1 x& A/ e" y7 @) d
// modelActions. modelActions is an ActionGroup, by itself it
0 C4 x8 v' q1 r9 M5 Z) y // has no notion of time. In order to have it executed in
/ X' y1 A% K. ]: I$ X // time, we create a Schedule that says to use the; \4 `' p- o2 P" l& U5 a5 v
// modelActions ActionGroup at particular times. This
3 B, |7 B) q* k // schedule has a repeat interval of 1, it will loop every
2 A3 i* O% |2 b // time step. The action is executed at time 0 relative to$ Y( o: b3 z+ F# Z9 q E1 Z) D
// the beginning of the loop.9 W: M D2 }1 _+ ~4 B# B! J
6 E) b; B6 h3 O3 } g( x d
// This is a simple schedule, with only one action that is, d, ~: @3 ~, E3 d1 ?
// just repeated every time. See jmousetrap for more: E7 w* w! i+ B, j
// complicated schedules.
- U1 t/ o8 D9 I * j: p5 d0 k9 @ ^
modelSchedule = new ScheduleImpl (getZone (), 1);: Z, A& t7 r- }: f6 h) Y
modelSchedule.at$createAction (0, modelActions);
5 A, D$ x, ^, ]3 r
: Q: L% A7 A# B" f3 b* d return this; a' u! O( ~, L8 [
} |