HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 z: E) |$ O& H& \ \
- I {! C( k- i* s4 V public Object buildActions () {' B, P1 |. H ~
super.buildActions();: n/ U; v! J0 G( d% o7 L3 A
) K" D. Y c# q% ~6 M
// Create the list of simulation actions. We put these in7 p+ e D0 C/ i+ F3 W
// an action group, because we want these actions to be
4 m7 [7 A% u" _: v& W. w3 U5 h ?+ P // executed in a specific order, but these steps should
$ U+ j" X% G- Z8 D( Q% V: \ // take no (simulated) time. The M(foo) means "The message R( U0 E8 j! o8 n \3 L
// called <foo>". You can send a message To a particular
% G" E0 ?( v5 _$ y // object, or ForEach object in a collection.6 g$ m# A$ ]( d2 C- V
9 l* j! e- y1 M/ L6 m( s // Note we update the heatspace in two phases: first run' Y W- |5 j* \: r
// diffusion, then run "updateWorld" to actually enact the
8 q2 r- d/ {& U, `* ^! x' w4 x1 z // changes the heatbugs have made. The ordering here is1 }) L( S1 b6 G2 P- ] \, I$ g
// significant!: g6 p9 d7 x3 }2 U2 l) C9 l( C
6 J/ b/ u* Z7 O+ [4 S$ O
// Note also, that with the additional% S6 b/ N1 \4 m0 u
// `randomizeHeatbugUpdateOrder' Boolean flag we can
a( W2 }: |% P$ ~. d // randomize the order in which the bugs actually run
6 ^' N2 N0 n! X4 U- y# H // their step rule. This has the effect of removing any
( b/ } P4 q- z7 [* I* \( N7 j# X1 D // systematic bias in the iteration throught the heatbug
, d1 I* P7 Y# a2 H/ s, a0 v // list from timestep to timestep
) ~$ V/ r: |1 P' V, g6 n5 g) N . M/ R% o0 c( S7 `! B" m; N" ~
// By default, all `createActionForEach' modelActions have
8 n! S& {0 s! U- n+ u* J // a default order of `Sequential', which means that the; t( q6 f3 ~# q0 \. A
// order of iteration through the `heatbugList' will be- M- l# U% k; F3 K: e6 i+ H
// identical (assuming the list order is not changed! A: y2 q# ?3 _' c c
// indirectly by some other process).
: b* d- k5 V, X6 g7 G1 L- R
, A. t; M: F" V& Z7 i modelActions = new ActionGroupImpl (getZone ());
1 L: q) J" a+ l7 q I" s0 u
* O% c. J, H( N* a3 a @ try {* E; g$ o1 R- Y6 }& ^7 p7 l8 z
modelActions.createActionTo$message: R3 \: V1 n7 O: l1 P3 U( g) Q
(heat, new Selector (heat.getClass (), "stepRule", false));/ R! }* ]' [5 \9 g/ T: E+ B! k* Q5 i
} catch (Exception e) {0 v) v3 D2 S- g" L
System.err.println ("Exception stepRule: " + e.getMessage ());
+ _: {9 D0 k" a+ Z2 y( J }
6 {& }/ F N, n$ b) \% E1 {$ I4 R% @. Y3 I* g) _
try {& B5 j s% v1 f0 i$ j/ h/ W
Heatbug proto = (Heatbug) heatbugList.get (0);
# H1 t4 `- z& Z/ x4 \9 U0 c% P Selector sel =
( s1 g+ `( a/ g4 {0 F% g, i new Selector (proto.getClass (), "heatbugStep", false);
! T; _' @$ M$ k actionForEach =) K* V! t; @: ?- Q) [) f! P( l. X
modelActions.createFActionForEachHomogeneous$call
7 E, x; A- N: P* h4 k* b0 w (heatbugList,
- w- m4 i- V+ e, @2 C new FCallImpl (this, proto, sel,
: I# E; R4 \. ?# d; t new FArgumentsImpl (this, sel)));
7 D+ c1 Y* H, o# e# h } catch (Exception e) {9 X6 L, C% A7 [2 R( H
e.printStackTrace (System.err);
" Z0 v: _0 f/ D }3 B% Z/ t7 |- ?
, I% A3 F3 k. y6 r( ]; B) N4 B
syncUpdateOrder ();
# b& G: t/ Y+ r' C5 z. m6 d% P1 a
% D" p' w8 g& H! {# S; Y8 @) B: I, A try {5 U- J$ r* I! i( H) t! Q% ~2 A
modelActions.createActionTo$message 5 m! h5 L m2 O7 M! ^
(heat, new Selector (heat.getClass (), "updateLattice", false));# \3 }$ z' ^% L/ ^" t, X/ T. h( a0 R
} catch (Exception e) {) a& ^" b5 N1 z1 J/ S
System.err.println("Exception updateLattice: " + e.getMessage ());# r: c" u( w" F, f6 y
}
% [' ^ e7 e) V& G' X
% P9 j3 [& k6 W1 Q1 U9 M // Then we create a schedule that executes the
' I4 B- b/ U3 x/ k3 y4 K // modelActions. modelActions is an ActionGroup, by itself it. x" I" M1 B2 J _9 }1 b- L
// has no notion of time. In order to have it executed in
% s. q/ U2 d; d6 D- f // time, we create a Schedule that says to use the
! v5 r. f$ B& J // modelActions ActionGroup at particular times. This- \6 t( _2 ]- h3 N) ^
// schedule has a repeat interval of 1, it will loop every
3 p# K, Q: U* B7 N // time step. The action is executed at time 0 relative to
) a) Y" n ?$ Y# D& H2 { // the beginning of the loop.
$ `" b. r7 o' C% D) ?
5 \6 I7 |2 k5 R( q C1 H // This is a simple schedule, with only one action that is
+ [! \3 e5 E: S& Y- d // just repeated every time. See jmousetrap for more
7 C. g9 Z v' a# M3 K // complicated schedules.; E' m( T/ H& ~" W: C
) n; H6 q+ f& u& t5 a3 J modelSchedule = new ScheduleImpl (getZone (), 1);0 C) C8 P5 ]7 w
modelSchedule.at$createAction (0, modelActions);/ s4 k# Z; o& z" z6 C) w" `
3 }5 y/ P0 E' N! d# Y, @# `4 { q3 r return this;
( v. s8 @) j6 R% F; I1 z. k } |