HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( s& B5 n% s3 l" z# u
% h8 S* M: T' w+ m
public Object buildActions () {6 c+ t* |7 E+ P M5 c
super.buildActions();
+ D5 \, c; N8 k4 }; N# j
! o& }! q# U Y // Create the list of simulation actions. We put these in
! O" v. W; K& |/ C8 b // an action group, because we want these actions to be; C* C* y: ?- `7 x3 ~8 f
// executed in a specific order, but these steps should! M& z7 j- A$ x( b0 w: }
// take no (simulated) time. The M(foo) means "The message
+ p+ u; j2 @6 n& ~: b // called <foo>". You can send a message To a particular
: P) t0 o+ z) d( _( \7 \" V // object, or ForEach object in a collection.
' m; {* h+ h/ i. ?6 `: ]# `% {0 A7 u 9 Z% B% H O0 P0 b3 J! t
// Note we update the heatspace in two phases: first run& z1 u3 j2 e/ ?3 T$ j! X
// diffusion, then run "updateWorld" to actually enact the; j5 ` l# x0 c$ e }( }5 c+ P
// changes the heatbugs have made. The ordering here is
# ^& [3 \ Q; m( E( b // significant!( ?# b: q8 b1 d4 W; [* Z; x: h/ Q
% i& e6 N; K* d& k' u' F( }( k // Note also, that with the additional$ p0 u0 e. X( u& |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
Y9 D( i* b" h- x! G // randomize the order in which the bugs actually run/ g4 ]4 A9 m" T# c: B' _" ^8 O
// their step rule. This has the effect of removing any
2 z! L9 L( [. l // systematic bias in the iteration throught the heatbug
* z0 K* U% ]; ] // list from timestep to timestep& _+ v$ Y0 K" V' I) {. {+ _7 z2 K
$ }9 {5 m: B+ C+ }
// By default, all `createActionForEach' modelActions have
U( E2 P" [7 j# L // a default order of `Sequential', which means that the
8 ?: R6 K. s m$ ?9 U- j // order of iteration through the `heatbugList' will be
: R- ]/ m e9 R6 R+ u) t7 l // identical (assuming the list order is not changed7 m/ `: N: f; D& y0 F
// indirectly by some other process).
& @- W3 x% S- j H / X% \: s% _9 j" j8 G# V
modelActions = new ActionGroupImpl (getZone ());: T2 p% t. R6 ]0 U& o
) e [, k( ^( p3 G2 j' P4 ^- d
try {
1 Q8 s" \) u* X modelActions.createActionTo$message; z. W: L- ~( \' b7 l5 E) ?
(heat, new Selector (heat.getClass (), "stepRule", false));" @. [/ n, N( H5 y/ J
} catch (Exception e) {/ @" w$ _9 h, ^5 i9 C+ _
System.err.println ("Exception stepRule: " + e.getMessage ());
; B) s- q# g5 J }: d6 J) Q ~' t. U
1 L% H/ R# ^& R* V4 ^# s8 Y try {2 L, U! y$ y' M. b. ?
Heatbug proto = (Heatbug) heatbugList.get (0);) d& b# B2 H( I" z& `7 L8 u
Selector sel = ) \: C& y7 `' q8 O# ~5 z4 s5 Y
new Selector (proto.getClass (), "heatbugStep", false);; `/ R5 [7 T0 O& b
actionForEach =/ x, H; k8 ^7 B% N; Q3 _
modelActions.createFActionForEachHomogeneous$call
2 ?2 q5 D' @1 K5 Z% z5 e% l& e (heatbugList,/ A5 |) S Y- n4 A$ F% [- c
new FCallImpl (this, proto, sel,/ A) ^. b5 Q1 f( [. a# i
new FArgumentsImpl (this, sel)));
0 H$ l+ {2 V1 B2 m% D+ p! M } catch (Exception e) {
/ J; `( x: v" P. n& B+ p9 ]1 s4 d e.printStackTrace (System.err);' e% e5 J/ ?+ x
}7 |% b# R" _: Y
- L5 _/ g! N8 c+ S0 N) s3 t
syncUpdateOrder ();
8 [4 n0 W8 A( l' G4 Z3 Y* p, v4 P7 B( m
try {/ `$ w8 p C& V- r
modelActions.createActionTo$message
( d# E# @9 x/ J( l (heat, new Selector (heat.getClass (), "updateLattice", false));
( C! j$ h2 T0 D3 i } catch (Exception e) {
& J& G3 c H2 A1 w1 l System.err.println("Exception updateLattice: " + e.getMessage ());& D8 l. K" z2 [( D, s# f
}
& o- }. e% v; r- _0 [5 a* K( G) {6 C# {
$ l( C7 S# d J4 } // Then we create a schedule that executes the
. Z+ @6 X/ l" O; a // modelActions. modelActions is an ActionGroup, by itself it
' [! n9 p! ], X U7 D; g( { // has no notion of time. In order to have it executed in
, z/ N0 p2 s9 j7 w // time, we create a Schedule that says to use the; r4 t. z4 a/ G1 K
// modelActions ActionGroup at particular times. This7 @/ e$ E' d6 ~$ Y7 h
// schedule has a repeat interval of 1, it will loop every8 u: {, K* |2 d3 L' M# x/ X1 O
// time step. The action is executed at time 0 relative to
0 l9 t+ l% Q+ `0 B // the beginning of the loop.
" J1 n. @1 q! U+ {( Z7 h, i- ?) H- X- ]* f8 a
// This is a simple schedule, with only one action that is0 @+ E1 b4 \0 o4 g
// just repeated every time. See jmousetrap for more
& S2 ^; c) [# @ // complicated schedules.9 U2 K! ~% _" O/ g" ?
/ I& t! A3 Q& w3 E+ I modelSchedule = new ScheduleImpl (getZone (), 1);- A1 g0 F, s4 K" \
modelSchedule.at$createAction (0, modelActions);
# n* z! K8 L8 O) V9 r
+ D: l, m2 ^1 F# o F return this;7 D' ~, @% e- ]6 b$ e- y
} |