HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; [5 K* R$ o. F2 H: W& O ~" w, _4 c
public Object buildActions () {* p" V! N+ _/ M
super.buildActions();# m0 t) J# L3 M6 f$ _, C% }
" U- F S5 X3 |5 m5 h8 ?0 f4 \ // Create the list of simulation actions. We put these in1 J2 d; |' @( ^2 k
// an action group, because we want these actions to be% g1 I$ h4 l1 w a0 v+ `
// executed in a specific order, but these steps should, \0 ?& s- T4 ?3 u! p
// take no (simulated) time. The M(foo) means "The message% g) \$ ~& E" K, B8 p0 q) u" \" I- q6 Z
// called <foo>". You can send a message To a particular
8 X" j& F5 f& Q X // object, or ForEach object in a collection.
6 s0 h, M/ G7 l5 B) {$ G+ y
0 \/ d4 f7 ?, H H" M // Note we update the heatspace in two phases: first run3 x b& |* Z( ~- L [6 A
// diffusion, then run "updateWorld" to actually enact the
' Y! b0 x# L" A- i1 s7 [9 s5 _* f // changes the heatbugs have made. The ordering here is
" u/ o. v9 B1 ?+ Z# U' \% Z% {1 { // significant!
6 E0 y! P0 w( \5 o
* ] w1 E1 Z5 y. M9 @7 l // Note also, that with the additional
, Z" u3 v% z3 `6 ^9 H, t) ]+ c // `randomizeHeatbugUpdateOrder' Boolean flag we can" e; C/ G+ d3 c; d8 @# h& R: T
// randomize the order in which the bugs actually run2 Q# X& T0 R- [ V7 R* H" J& l2 p
// their step rule. This has the effect of removing any4 s$ N9 W2 [1 _
// systematic bias in the iteration throught the heatbug3 d$ z- z5 ]* t2 l# t
// list from timestep to timestep# z: }2 W. w' K4 O& m; w0 j
1 U* h- O+ y+ d4 Z( V // By default, all `createActionForEach' modelActions have
0 c- m9 C4 z, E. x. \, `3 l0 F7 U& r // a default order of `Sequential', which means that the
l2 J+ N* I4 S8 x& L/ V' B3 n' C1 ~ // order of iteration through the `heatbugList' will be
1 W3 `$ ~* U) n! |9 U- a/ M! P- e // identical (assuming the list order is not changed
. b* A; k/ G1 G' F5 O3 l! T // indirectly by some other process).2 d1 p/ ~- V; \" C
- ]: @) d# f% A* n# [ modelActions = new ActionGroupImpl (getZone ());
+ @4 @: i" o. V3 n" [; \- X5 Z! I
$ b# a. y) V; N" @$ w& c K& o try {1 c- c0 m# q: M! e2 B3 [& e
modelActions.createActionTo$message
0 a+ `6 ~4 C, U. F" F (heat, new Selector (heat.getClass (), "stepRule", false));! n& f4 I/ i z" C* S3 a6 A4 {: F. n
} catch (Exception e) {
& x6 s7 `9 a' p0 q. B4 ~ System.err.println ("Exception stepRule: " + e.getMessage ());9 c3 _' l& S. U! i
}
3 i0 i F+ V8 s! [2 }/ M) [6 A0 M k7 b6 c3 m+ e1 l1 N, m q
try {2 h7 t0 N x! Y% \- {/ ]! v
Heatbug proto = (Heatbug) heatbugList.get (0);
) O# T4 h7 j8 B( g! X Selector sel =
; ?% @6 l$ y: M. |1 w new Selector (proto.getClass (), "heatbugStep", false);
2 x3 ?& s/ I5 Z! T actionForEach =7 W) U1 z& f# B" R, G; H
modelActions.createFActionForEachHomogeneous$call
9 i1 z' w1 E" T4 a (heatbugList,
# j9 }6 t0 G8 {* I new FCallImpl (this, proto, sel,
' m9 b/ C6 ^ V1 V c0 m new FArgumentsImpl (this, sel)));" ~: \2 i0 g' g* f7 X: {6 _ d+ i
} catch (Exception e) {
" J/ u+ y3 ^) N* @( [! a e.printStackTrace (System.err);
! Y6 h5 }8 ]0 H2 Z; J+ ~ }; N$ }* |3 c0 `, m" g. G5 G
9 F! j0 I2 z& f syncUpdateOrder ();- P* A' ?6 c# D3 a8 R) ?$ `
" M& E9 U" h& T$ h l6 ^8 i
try {# t3 W$ c/ v9 i# P. }4 r" w
modelActions.createActionTo$message ( R, ]% H" D L4 c) ]) J
(heat, new Selector (heat.getClass (), "updateLattice", false));
" P6 N3 U3 ~' w- m } catch (Exception e) {
5 C" H4 l- s* J* p$ J ` System.err.println("Exception updateLattice: " + e.getMessage ());
: [5 O! _* N& n. y/ C" H9 r }
( V, |6 m. [+ L" S. L8 o, d
2 W( P8 x' W1 D. O6 { // Then we create a schedule that executes the( H4 Y6 k7 l3 ]6 y& T+ N: i0 s! F
// modelActions. modelActions is an ActionGroup, by itself it
4 k. J& D$ ~+ v- f // has no notion of time. In order to have it executed in" Q9 C# x! \2 t! L- F
// time, we create a Schedule that says to use the
1 J1 v( i% H7 N2 E7 {: E // modelActions ActionGroup at particular times. This: v2 {4 \ H: R1 W( p B' I
// schedule has a repeat interval of 1, it will loop every3 U2 d4 V8 `2 r. I$ D6 K
// time step. The action is executed at time 0 relative to
/ _! p7 M* l9 j4 |8 j // the beginning of the loop.
. T# r% d: }; h
+ w1 @ P2 C% n // This is a simple schedule, with only one action that is
l: \: R% ^+ P) ^ // just repeated every time. See jmousetrap for more
+ E7 C. K" V) U( U, v+ x // complicated schedules.
7 Z H) ?- G7 q" s0 } ; V7 E' j/ k1 a. U2 _/ R; @
modelSchedule = new ScheduleImpl (getZone (), 1);
; z' g5 w, {/ S" n y1 F. | modelSchedule.at$createAction (0, modelActions);) m" ^" T/ X3 F6 n% E
& |* M( z; E% h return this;
( E/ \/ v7 h6 B6 r! z" L } |