HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! G( w4 j2 ~# s I6 u( a; e# I- N$ ]7 u. o
public Object buildActions () {
, d# n/ x1 w8 ~0 D. x/ a) j/ H super.buildActions();( E" D* P: U( `! a. k- ~
; A. D* M4 J5 W' e+ Q5 F // Create the list of simulation actions. We put these in0 V5 V$ j" J4 y8 o9 D: u
// an action group, because we want these actions to be
' V4 \& g/ D4 ^6 X+ G // executed in a specific order, but these steps should t' t! s) f( z' \8 s
// take no (simulated) time. The M(foo) means "The message
0 d- M8 L' b0 o! O; v7 [1 F7 w // called <foo>". You can send a message To a particular
! N( U6 e( N |8 k // object, or ForEach object in a collection.
" M* I$ ]( h0 {% b9 U % Y3 H& K" _& r k0 T8 J
// Note we update the heatspace in two phases: first run
2 D( Z. @* _7 \ // diffusion, then run "updateWorld" to actually enact the3 R8 w$ P- X e% o5 N
// changes the heatbugs have made. The ordering here is
, H$ U% h, j7 p' k' T ]$ o // significant!
( n( G+ l0 M( m0 p3 }7 C
9 g: I( G7 x7 ]# Z% }7 ]5 N // Note also, that with the additional) K3 G5 I9 R, a( I+ `9 W. U
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 F5 S& G+ L" K: C2 ^7 w: n6 I
// randomize the order in which the bugs actually run
4 P3 I4 ?1 T5 \+ d // their step rule. This has the effect of removing any) }5 w/ \! x$ |0 }% m+ [7 v
// systematic bias in the iteration throught the heatbug
- \; n$ U& ?: j // list from timestep to timestep
- x3 X$ J) [& Y. n, F
* }+ v( r$ R4 u2 e: p( o* F // By default, all `createActionForEach' modelActions have7 A( z9 o* {" b: {1 T# r3 G
// a default order of `Sequential', which means that the
& `5 }' E8 J% [8 M; n% T$ ~' i$ {) s' h // order of iteration through the `heatbugList' will be
! Q% M3 Y' P; j // identical (assuming the list order is not changed L- D: v+ i$ k$ r5 G6 r& k
// indirectly by some other process).5 e& S+ ^" y* ~. E6 M
$ ] _6 c* D4 W7 ~& @ h& }
modelActions = new ActionGroupImpl (getZone ());
, z- a0 I- l5 P* ~' w( O7 \& s$ z7 j; o& h
try {
+ `7 N' L0 S S U9 \ modelActions.createActionTo$message
r5 G4 d; g) K/ f7 }3 Y (heat, new Selector (heat.getClass (), "stepRule", false));
$ K! N6 L/ Y" h Q( a& K+ r } catch (Exception e) {6 ?! i% b: `9 k3 d
System.err.println ("Exception stepRule: " + e.getMessage ());! b |9 ]% P1 o# d9 H. b2 P
}
! z, _8 k7 r) u# O% P
) m; ]2 u, _6 ?& T& G7 z; O try {
+ u9 _7 D3 K( c* Y, q Heatbug proto = (Heatbug) heatbugList.get (0);- u" g2 S) h/ x2 X
Selector sel =
# b# Z% p$ c/ [. b new Selector (proto.getClass (), "heatbugStep", false);0 Y$ n! h: Q, d* \0 U6 q# i
actionForEach =
# B/ B" F6 t" P( D% r modelActions.createFActionForEachHomogeneous$call
! X& Z$ K1 n( I% M; y (heatbugList, ~6 M' a) D" o+ B; i; F
new FCallImpl (this, proto, sel,
: G3 }4 r1 b& v9 [5 L1 ~- ^ new FArgumentsImpl (this, sel)));
( ^* O$ f$ X) ~- X: z1 L } catch (Exception e) {
Q6 \" a6 A) h2 w8 `4 N+ K e.printStackTrace (System.err);
; i) t+ F/ J- T; {0 d+ {; Y& Q }
# {: |* V$ Q( G+ k$ r* M, w
; K4 a/ V. S# y' W% \8 B3 m syncUpdateOrder ();9 @! j5 G9 I5 {8 `
# C, X* |3 N3 s9 T! d5 m
try {
3 l5 X1 k$ r: Y( i* @9 n modelActions.createActionTo$message ( Z: O6 a2 S2 e6 [
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ Y7 m: |+ Z6 _; o" d& ^ } catch (Exception e) {0 U! b3 {/ w) r
System.err.println("Exception updateLattice: " + e.getMessage ());& \ i& M2 e1 ~& P( M, S" B0 L- m0 q
}, \9 N4 O0 |; [. u k+ ^
1 T: q( ]7 U' }* [
// Then we create a schedule that executes the J. T; U4 [% N. L: l
// modelActions. modelActions is an ActionGroup, by itself it; e* e4 k( G, p2 V
// has no notion of time. In order to have it executed in
, U( ~8 i% s6 Q5 p // time, we create a Schedule that says to use the7 r$ M2 W3 O7 T; f4 u- \. h$ k0 ]
// modelActions ActionGroup at particular times. This
4 F3 y" P2 n% b/ V+ ~ // schedule has a repeat interval of 1, it will loop every* F% Z: ?0 k7 U- f5 d" g
// time step. The action is executed at time 0 relative to
/ z1 I* ~* a# h& ~3 z // the beginning of the loop.
& B: z) r- x' }
; w$ N* p. b# D! P: s( s5 B // This is a simple schedule, with only one action that is8 D9 _( h- J0 v2 g; i) H
// just repeated every time. See jmousetrap for more# P7 L- o0 u5 v1 O/ [
// complicated schedules.
4 R) p. d' |7 Z& Y& P . J2 m+ W1 E$ o% M
modelSchedule = new ScheduleImpl (getZone (), 1);
* F( u2 x; v0 x) g. t) ]8 ^ modelSchedule.at$createAction (0, modelActions);
- {- V! q$ h' K! c a 9 ]+ z* n( N/ R; }4 b& U( A8 n
return this;8 a- k3 e6 U) _4 B# V
} |