HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" O2 e- h6 ]( c ]+ U" w4 k
( B2 L- H4 _8 @" ?
public Object buildActions () {0 a% W# w1 J7 _3 Q
super.buildActions();
. n9 k5 H. C$ ?5 s# k ; K* c# F! J, b$ E
// Create the list of simulation actions. We put these in/ ~; |/ X0 f; E$ @2 C5 s
// an action group, because we want these actions to be
/ ]8 ?7 u, p2 M0 X // executed in a specific order, but these steps should
! o9 s. V5 T7 M2 _( @ // take no (simulated) time. The M(foo) means "The message, u& G5 m9 Z0 ]! m
// called <foo>". You can send a message To a particular7 k1 t" ]: Y+ ]/ Z) Y
// object, or ForEach object in a collection.# Y) g% z# N7 O/ F$ { W2 Q
& P; A1 R- L! h9 c* D0 y
// Note we update the heatspace in two phases: first run4 E. [& V) T* f3 B. N# T2 Z( x
// diffusion, then run "updateWorld" to actually enact the
6 ^; }4 j! \9 g1 v1 K6 j: G) z // changes the heatbugs have made. The ordering here is
' @& E; b: E4 V' B // significant!6 t( B5 y. U) w, P% X/ B
! E) K+ R7 p- K) J7 |* T
// Note also, that with the additional
+ i3 Z0 J d: h7 ^( R7 c // `randomizeHeatbugUpdateOrder' Boolean flag we can
% U0 v9 \0 x! R# M3 O+ T // randomize the order in which the bugs actually run
- X- ]0 p H$ x* R- V6 Y. }! D' J // their step rule. This has the effect of removing any
9 z4 e+ l m& S5 K% X1 k // systematic bias in the iteration throught the heatbug1 Z9 W7 c5 j4 r7 N6 ]- j
// list from timestep to timestep
6 _0 y/ ?" P5 c8 S4 ?( ]/ _' q 4 w9 \ G# \+ |5 E) `* s
// By default, all `createActionForEach' modelActions have
1 v$ F( }$ \8 L$ m! N1 e // a default order of `Sequential', which means that the+ K4 ^. }1 U1 Z- n1 M" m# N. d2 N, Q d
// order of iteration through the `heatbugList' will be' K7 f0 @9 _$ G" B0 J/ }- M, N; x
// identical (assuming the list order is not changed
/ l1 P7 t# s2 `7 R# s5 ^0 ` // indirectly by some other process).
+ r2 A+ @, v. }' }# |. m " X% r/ d+ x3 C6 G! J
modelActions = new ActionGroupImpl (getZone ());& i9 d; E# L; P6 i# k
2 Q' T6 y! [7 ~' r5 h
try {. S; l I8 E1 y, w8 D
modelActions.createActionTo$message
/ K# l2 W$ Z6 c0 x. r% H, m ` (heat, new Selector (heat.getClass (), "stepRule", false));- j0 b9 p. K/ a7 n* A% ]
} catch (Exception e) {
+ M2 p9 C* r5 c5 |0 `7 _ System.err.println ("Exception stepRule: " + e.getMessage ());2 \1 s" U7 n% M0 k4 e; g4 S* y
}
- q6 D9 G3 G& h" H( l
4 Q8 V* S0 _- ?% L' q& q try {6 E9 Z* ^# t/ B8 B9 P, t
Heatbug proto = (Heatbug) heatbugList.get (0);8 K" Y5 P6 S5 Q- }
Selector sel =
' ?. M; g$ E8 ^ j( v; B0 i new Selector (proto.getClass (), "heatbugStep", false);
( n# Q$ D6 S0 t actionForEach =
$ K) E0 a3 ~4 W2 H modelActions.createFActionForEachHomogeneous$call
$ O5 ~- g9 @8 j7 y (heatbugList,: f9 {0 {6 n' ^, N) k. l. q0 {
new FCallImpl (this, proto, sel,8 {3 ?5 f5 s* s, Z
new FArgumentsImpl (this, sel)));& @# A. q: t- O; y* f
} catch (Exception e) {# p# P2 F3 O- t# a6 t$ y. q( A
e.printStackTrace (System.err);" G9 P# V- l# ?) f
}4 M1 s2 ]4 W& k) F
6 X1 A% r" e* X$ A1 s syncUpdateOrder ();0 D3 o# @" E' N( G3 z) q$ l
2 ?3 C x9 g( r try {
' ]) Q! X4 |' m `# u; n modelActions.createActionTo$message 0 n" `+ B6 ^# c
(heat, new Selector (heat.getClass (), "updateLattice", false));' X5 c" {9 w1 K7 x* H1 b8 V
} catch (Exception e) {
8 a' p( @8 S7 e9 M7 F System.err.println("Exception updateLattice: " + e.getMessage ());* w0 Y) }/ F: f" ?% r4 S
}( D" F; b+ L0 M, K3 H
$ H. C( t4 N9 I2 E; ?
// Then we create a schedule that executes the
5 @; s' g8 e N& M // modelActions. modelActions is an ActionGroup, by itself it5 D! }4 N% z- V" @) Q0 [+ a& s
// has no notion of time. In order to have it executed in
) T* a$ W6 R; ? Y& J // time, we create a Schedule that says to use the
; t; y# A, L" i" y // modelActions ActionGroup at particular times. This
4 \" { h8 E/ \! e! N! K F. d // schedule has a repeat interval of 1, it will loop every
6 a8 r3 `* [( W1 _ // time step. The action is executed at time 0 relative to: ?: j. k1 B9 p2 f7 J" g. d( ?' o
// the beginning of the loop.
+ z/ S5 C8 K0 \
5 J! j/ r1 |1 a( m. p" N // This is a simple schedule, with only one action that is
7 O% ?* J1 c8 y4 ]5 @& F2 d# }1 Y // just repeated every time. See jmousetrap for more
; @6 N7 k9 e; p T0 ]' Z // complicated schedules.3 b0 u6 |/ ~9 k- [& J
( D% I: V, K* v* H3 o9 i
modelSchedule = new ScheduleImpl (getZone (), 1);
3 y. b/ ~' r4 u modelSchedule.at$createAction (0, modelActions);
+ D" X$ q0 F# V$ `- e3 Z 2 F7 Z. k1 x' I, k' J6 g
return this;
7 f" i5 X" [7 J0 U3 d } |