HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! b% a9 Q! F2 K6 S! I# m' Y, I+ m* Q4 H
public Object buildActions () {- a+ K; `8 [/ J" h |
super.buildActions();& b* b6 n, r3 i6 R( i
a. i5 p. [1 ~9 o: T
// Create the list of simulation actions. We put these in- D! s, ^* T/ o9 |+ l9 M& T: ^! Z
// an action group, because we want these actions to be
5 d* h s' Z. j& Z8 J // executed in a specific order, but these steps should
1 G) Y9 L! j5 x" x4 f8 Y" x3 _ // take no (simulated) time. The M(foo) means "The message
: C+ D5 t2 s* g- D |- f4 C // called <foo>". You can send a message To a particular
$ S6 t3 z" `% N2 l/ m // object, or ForEach object in a collection.) C$ }& ~7 ~7 i9 ], R
9 i7 p! I: n6 F; _4 t+ t; s! F // Note we update the heatspace in two phases: first run6 j; O: J* G: M) Z
// diffusion, then run "updateWorld" to actually enact the! Z9 y( `4 J/ }4 f
// changes the heatbugs have made. The ordering here is
G) H; R4 L, d1 x9 m // significant!
4 Y. K# \: Z7 Z: A8 m: F
. R+ n1 v. t% C" u' K" q // Note also, that with the additional
5 q4 }7 }& X3 r; F // `randomizeHeatbugUpdateOrder' Boolean flag we can; Q$ A4 h' V0 r/ Y
// randomize the order in which the bugs actually run
* T* `' @* a% v- h8 Q- N // their step rule. This has the effect of removing any
& E& M7 `/ a/ [9 ? // systematic bias in the iteration throught the heatbug
4 L2 O- j7 G6 `. s4 @ // list from timestep to timestep# i: X* {8 J6 f. N8 W7 Y
- h" `& B+ p7 U4 _/ D6 @
// By default, all `createActionForEach' modelActions have2 h- O0 q4 s4 ?8 Q4 T/ {1 @
// a default order of `Sequential', which means that the! ?( @$ U# p1 Y; e
// order of iteration through the `heatbugList' will be3 ]# u+ b V M) O7 y
// identical (assuming the list order is not changed
* I5 q$ P4 p2 K& x0 d0 L* W // indirectly by some other process).
- g/ s2 |4 X8 N; F# h: P
6 P7 V I& g1 f8 T modelActions = new ActionGroupImpl (getZone ());
3 X6 q& z0 H5 r7 I: S
% t2 m4 N& D6 W try {7 |1 ~# P6 u% P, Q% @4 o) ?
modelActions.createActionTo$message
; f3 X4 R' _* G! C c2 x; I0 T (heat, new Selector (heat.getClass (), "stepRule", false));
5 o4 C* p4 h. X/ n! a( t+ h+ | } catch (Exception e) {0 o) } A& W4 y& P O6 _* @3 F* _
System.err.println ("Exception stepRule: " + e.getMessage ());. f$ |$ C: ~, }- _) S' {
}
/ k( A3 I# i! J: b$ J2 G" ~" P' k# k. ~, L5 H2 g7 c! b5 S, h- A# W6 s
try {) S& u% L4 `& s' [( X' E7 ^& L
Heatbug proto = (Heatbug) heatbugList.get (0);
. m6 K7 H j! c+ ]# R4 G Selector sel = ) L( Q3 B( x: l9 O w
new Selector (proto.getClass (), "heatbugStep", false);3 c. Y7 D% s5 m- K5 x
actionForEach =
6 d4 O7 {1 V' M, y2 F7 L4 k: V+ c: Q modelActions.createFActionForEachHomogeneous$call/ {" e) d3 F, e! `' B
(heatbugList,- f5 C; N; {' ^/ }3 T) r
new FCallImpl (this, proto, sel,
, z9 x" ]4 G, Q; u5 r, L& D8 P8 z new FArgumentsImpl (this, sel)));
- P4 e3 h: e: a } catch (Exception e) {, g! D. ^, V) P0 W H' B8 N5 z
e.printStackTrace (System.err);
$ H" B5 M) I0 I% F( A }
% }; r K5 g1 t: L S& H. Y4 F " I- n) K" P+ u+ _: A
syncUpdateOrder ();# b! `# V2 F5 `
! _! U" |- R |/ ^( F try {% B' F, e8 {( y( k
modelActions.createActionTo$message
5 c" L! v1 p' B: K- p5 l (heat, new Selector (heat.getClass (), "updateLattice", false));& i1 {# N; S' N2 a; P; K
} catch (Exception e) {" x6 c% E5 D4 }
System.err.println("Exception updateLattice: " + e.getMessage ());
- {6 w, F8 J, h- q }6 O* z8 d( Z0 _7 z/ @! U8 T! R
C2 M3 ~( q: B2 ]: b* a% { // Then we create a schedule that executes the
' b+ k5 w4 [* T; o( P // modelActions. modelActions is an ActionGroup, by itself it
) G4 k7 B; I* P9 P // has no notion of time. In order to have it executed in" K+ m" [& W0 {, T
// time, we create a Schedule that says to use the Z- z4 ~5 _! G
// modelActions ActionGroup at particular times. This
! u7 p1 h# [' P2 x: | // schedule has a repeat interval of 1, it will loop every4 H" A( O$ d+ g) L9 `7 ~
// time step. The action is executed at time 0 relative to
3 ]' S4 Z' S2 J% P/ \ // the beginning of the loop.
9 ^( y* F& @% P9 o ] m/ x) F$ B7 e9 P* s8 W& C1 B: a/ z! F, r( u( F8 {1 M
// This is a simple schedule, with only one action that is
( S4 g4 u, K5 z // just repeated every time. See jmousetrap for more7 ~# H2 V: a% K b3 P
// complicated schedules.
2 J W3 ?1 S9 X* ^4 V0 u & z/ a" s; U O: J7 h! D
modelSchedule = new ScheduleImpl (getZone (), 1);7 I" l6 t: M+ W2 S
modelSchedule.at$createAction (0, modelActions);
8 _: A1 S8 Q% {$ L% N9 W9 e7 T
, d6 S& `. {5 N7 b" C1 m return this;7 R9 Y& F/ Y. x+ O$ n2 C/ H& C3 X
} |