HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. Q, R. D/ y5 \4 X6 z
- _, ], c' S- {: s8 h public Object buildActions () {
# t0 a4 O* m H) @4 ~' k$ ? super.buildActions();
! R* {/ J+ D5 E, _1 E 0 Q* e) [. m1 F; F, U
// Create the list of simulation actions. We put these in
, o. y. b8 }- o' c$ i& Q0 g // an action group, because we want these actions to be
" u/ |7 ^' f2 Y // executed in a specific order, but these steps should: j8 U. }5 E. j/ W3 q
// take no (simulated) time. The M(foo) means "The message! V5 c# n' r3 v
// called <foo>". You can send a message To a particular* J. t6 I7 {" k* _0 v
// object, or ForEach object in a collection.# G. q g! S/ U% m) B
9 l. O2 |3 g n4 F4 G* {% Z% i
// Note we update the heatspace in two phases: first run
% @/ I* p0 J2 |' G // diffusion, then run "updateWorld" to actually enact the
I/ z f0 p1 g // changes the heatbugs have made. The ordering here is- h1 Q% X1 W& @: q7 ?$ }
// significant!1 _* V6 a3 A3 l" J
6 h8 D7 b! u! i9 A3 f8 V
// Note also, that with the additional* E) A. z$ a" Q* s4 _. n6 I
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 E. B6 S3 _6 Y% f, y
// randomize the order in which the bugs actually run4 D! S5 Y$ r2 G/ _
// their step rule. This has the effect of removing any
; J0 N# o* U9 G! q( B* |! Z // systematic bias in the iteration throught the heatbug, ^/ s9 |: g8 C
// list from timestep to timestep, {( q& K& m$ C% i
4 u+ w9 O8 F1 E5 X+ a2 ^: O& \
// By default, all `createActionForEach' modelActions have
# c" D, k8 i9 _3 u; i9 Q* H+ i // a default order of `Sequential', which means that the
) u7 A: ]6 ~2 l" B: e // order of iteration through the `heatbugList' will be9 H) e3 H- R" w$ r Q
// identical (assuming the list order is not changed- G4 H& R6 m d; |' e: r$ s- R
// indirectly by some other process).
0 ]5 Y7 h* [1 E) U1 w 5 Y3 O6 q9 _ w$ e8 X0 K
modelActions = new ActionGroupImpl (getZone ());3 G0 y- d* R: u8 g
/ w$ w, K9 a# c/ l5 M try {6 ]0 Y% P( f& _& {4 |- M- Q
modelActions.createActionTo$message3 o4 J( \" k8 q2 {7 u# n: X
(heat, new Selector (heat.getClass (), "stepRule", false));
7 U: c: G4 w/ _, U } catch (Exception e) {8 p7 B/ l( B; [! ]- s" Z: W
System.err.println ("Exception stepRule: " + e.getMessage ());" H4 w9 m, j g7 i3 W* H( A, |/ s7 ~
}2 u0 \1 T- Y1 Q! l5 B
6 k! j" T: W4 s: r8 g try {& j- C7 N" f0 u- V2 \9 _4 ]
Heatbug proto = (Heatbug) heatbugList.get (0);8 Q3 E- ?# n) z* p
Selector sel =
) \6 Q# t% U" i, D% Z% s/ H new Selector (proto.getClass (), "heatbugStep", false);$ {1 k. \$ T3 \5 @5 ?: R) U
actionForEach =
9 J6 {$ A m$ c6 i2 ]/ O modelActions.createFActionForEachHomogeneous$call- f! n5 N! I0 o Y; O9 X2 w
(heatbugList,, u/ o1 M$ w5 v+ `9 Q3 V' s- A
new FCallImpl (this, proto, sel,
6 d6 W. z+ @/ w( s1 N new FArgumentsImpl (this, sel)));
) O, G; [! Q7 O* P* ~/ \5 O& v7 f } catch (Exception e) {
H, L" j* z. X2 _ e.printStackTrace (System.err);1 a9 N9 t/ y) ~4 S% k; ^) c
}
4 k) J1 J, l0 ?3 j ! {3 {6 Y7 Z5 S- |( N
syncUpdateOrder ();
5 @/ [' w) ~4 g' `# n: u$ @2 n
/ r3 j( U, w3 v try {/ g$ H4 l- i# t0 X0 z' M
modelActions.createActionTo$message & k+ ~) v; A$ y. ^# j
(heat, new Selector (heat.getClass (), "updateLattice", false));
! {8 @$ Z2 O' v- a, { } catch (Exception e) {
. O( T& Z3 @- H System.err.println("Exception updateLattice: " + e.getMessage ());; m5 P. C; w2 S, a# ~+ I8 b
}! P& k8 B/ ? x2 d8 L
& \6 I; `6 P" n* Z
// Then we create a schedule that executes the
% X* K5 |: x: ~# M' G4 p, x0 R // modelActions. modelActions is an ActionGroup, by itself it3 |" _3 G y: g4 N* Q2 { U0 Q0 k
// has no notion of time. In order to have it executed in
2 }4 l! p: F6 M# C // time, we create a Schedule that says to use the3 H$ B) E$ [0 A% T, j9 M5 E" w x& J
// modelActions ActionGroup at particular times. This
" U1 o8 V h9 E3 Z0 a1 o5 Z1 c // schedule has a repeat interval of 1, it will loop every
3 d" O! c# _9 a" F# r7 A/ v2 D9 P' ` // time step. The action is executed at time 0 relative to8 Q7 G, A1 x! n9 A3 X
// the beginning of the loop.: a- n3 r* V. v4 R* }
! k2 l9 k' \2 k2 V- C
// This is a simple schedule, with only one action that is/ X h7 `) E% d5 y
// just repeated every time. See jmousetrap for more
; s+ ?' O* _4 C // complicated schedules.* a; `, ?" s2 ^1 t# d
6 X7 S, C9 }) w) a modelSchedule = new ScheduleImpl (getZone (), 1);
, J" y4 ]( e/ L modelSchedule.at$createAction (0, modelActions);
3 l+ l# { V; E* @ 6 b) f" Q' ^% w0 _$ d& B z m
return this;
% C; t% P; l5 U( c+ E } |