HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 [% m4 e, A' U# D( H! c: }7 r, P
: Y: F" E# B0 m3 u0 V5 H* b; | |
public Object buildActions () {( |1 E2 N$ X) S
super.buildActions();
0 P9 s, Y3 D) n2 r+ }% A
% n; h. M3 Z/ I$ S4 E // Create the list of simulation actions. We put these in2 M, E* @& H* z2 _# T6 c
// an action group, because we want these actions to be$ |, Q6 [1 I+ x" y
// executed in a specific order, but these steps should
' {1 G; \, E0 U I7 j4 O // take no (simulated) time. The M(foo) means "The message
4 u0 Q* u/ V1 h) }) w+ { // called <foo>". You can send a message To a particular5 F) R* N7 m9 L7 c6 l1 E# i
// object, or ForEach object in a collection.
# ~$ ?& l3 c) ?2 A ' c0 _; ]; ~8 J) ~6 V8 H
// Note we update the heatspace in two phases: first run
! U4 P& v9 a! y) v8 G // diffusion, then run "updateWorld" to actually enact the
0 k0 t; r2 V0 B( \; s8 J // changes the heatbugs have made. The ordering here is
: H8 X2 C7 s) v, X$ X // significant!
5 w8 d5 F! }* g3 Q8 ?
0 Y- U. U) \7 ~# [ // Note also, that with the additional
- r k- K$ q7 \2 i! d$ i/ x) N/ _ // `randomizeHeatbugUpdateOrder' Boolean flag we can- {+ o" l* G% I, v& l2 d
// randomize the order in which the bugs actually run' Y% l! L' t. ^! j0 E" a
// their step rule. This has the effect of removing any3 Q5 @2 A6 U9 `% u S. r
// systematic bias in the iteration throught the heatbug
3 @/ v$ R$ A9 B // list from timestep to timestep
. ] s& |! `" X 9 `! p& w& Z0 ~& W3 j
// By default, all `createActionForEach' modelActions have
; o$ h* q3 w/ o4 [6 }& Q5 k$ | // a default order of `Sequential', which means that the
' m2 @8 Y1 l& b8 l& M2 O // order of iteration through the `heatbugList' will be6 P: D' {" I, ?9 G
// identical (assuming the list order is not changed6 l' R8 [ I2 d$ F+ m
// indirectly by some other process).
+ W; X# ?$ C/ N # `* S3 E! C9 f. W
modelActions = new ActionGroupImpl (getZone ());5 v+ i% b; J$ V* ~! y b4 T
9 z* v7 E- Z! z
try {
# `0 @0 w2 i6 x. e8 Y0 [' L9 n" T modelActions.createActionTo$message
) q8 s/ s. z! r4 @ h3 W9 a (heat, new Selector (heat.getClass (), "stepRule", false));: i& \ {! ~$ R+ h$ L" k
} catch (Exception e) {' X' M" G( Q+ Q$ e" A0 Q; @8 F( N
System.err.println ("Exception stepRule: " + e.getMessage ());" c1 h D( x! ^- s S" q
}
: v& l& |' e0 I2 m+ ~! o! ?4 f4 ]) j. f6 ?' `: b( L
try {: g$ s7 O' y4 z. T5 n( J6 I1 m
Heatbug proto = (Heatbug) heatbugList.get (0);
6 M. d6 b4 ~. J% L; e! y" r8 [ Selector sel =
& K5 V7 F) n) h/ I* `3 ? new Selector (proto.getClass (), "heatbugStep", false);
& @' V0 c: G# k/ _/ b7 A3 o) o5 n actionForEach =: D- x2 E, P: U. A+ H# P& F
modelActions.createFActionForEachHomogeneous$call
. n, ]% }. Y% `* _$ B. J (heatbugList,
+ [5 Z5 F' g0 @" Z2 g4 ] new FCallImpl (this, proto, sel,
' J1 S! e1 u' L new FArgumentsImpl (this, sel)));
7 G+ R, c: R3 q8 C; ?# \& H } catch (Exception e) {+ ~$ a9 w+ `5 X' s: ^6 g
e.printStackTrace (System.err);$ @8 j4 K$ r9 h* S p, c z* W
}8 E! x7 I8 P) w
3 }" K0 l. i/ e syncUpdateOrder ();( {' b5 m X; n
7 y9 g4 E8 l9 }
try {
* _6 t- R7 A5 v6 r/ U2 B modelActions.createActionTo$message 0 G1 C4 x n2 @. `. _* g+ a
(heat, new Selector (heat.getClass (), "updateLattice", false));6 B- u9 x0 ]) j7 W/ s9 y- v' a: y( J2 M
} catch (Exception e) {7 W6 P* T+ B3 _
System.err.println("Exception updateLattice: " + e.getMessage ());3 \6 O" {& w/ A. d
}2 w" n& e; k3 N# p3 d. m
: H' }- { \2 H, D
// Then we create a schedule that executes the! t! ~$ [8 h: X X! Y4 Q) g; `3 j
// modelActions. modelActions is an ActionGroup, by itself it
' X1 a8 n( X5 }) z7 x // has no notion of time. In order to have it executed in# | g' J: {8 S3 n% Y- L0 G) i& Q
// time, we create a Schedule that says to use the
1 ^- f5 c2 ?2 V6 Y+ b! ^! W // modelActions ActionGroup at particular times. This
" l& I6 d/ M2 s9 F5 l: z // schedule has a repeat interval of 1, it will loop every1 }8 K8 `5 m* N% q; W
// time step. The action is executed at time 0 relative to5 j |! H7 E @% j
// the beginning of the loop. n1 m w0 ~0 d8 X7 }0 t9 V
; O3 O( R# ~, @+ `" A5 `6 z
// This is a simple schedule, with only one action that is
/ `4 z8 `& _6 t, r+ T // just repeated every time. See jmousetrap for more/ B" y) L, r" W& `
// complicated schedules.
2 \! V! P+ ]. e& D& L8 O3 O9 `6 \: D
" F7 P& r8 z5 I/ |1 ^2 x3 r0 h* a modelSchedule = new ScheduleImpl (getZone (), 1);0 w# e7 w) I" `" t
modelSchedule.at$createAction (0, modelActions);6 A, I" I: Y7 H
3 k; e+ l9 D7 r% p+ h d+ X return this;" M b. P4 e. V" _( U
} |