HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: w2 S1 c7 F4 B5 x0 L- ]! O# z
C2 `- ?+ D6 `" I# [8 p
public Object buildActions () {: @. s% a/ o! w4 W/ J
super.buildActions();
# F3 o5 n5 X, X) F) S
; N/ v7 a2 k+ ~" F/ w n // Create the list of simulation actions. We put these in
* u$ [# E6 J, v- H' S) N2 n2 z, ~ // an action group, because we want these actions to be
% j7 S# E4 ]: E8 `# y$ o! k // executed in a specific order, but these steps should; |) I& b) l O9 _
// take no (simulated) time. The M(foo) means "The message! A+ d/ m# d* p) x3 m+ G4 Z
// called <foo>". You can send a message To a particular
6 s6 c# I, D. u // object, or ForEach object in a collection.+ `. w# w- w# T) R: }4 Q% v
2 a$ h! V1 a* b% J) V // Note we update the heatspace in two phases: first run& B3 k1 \( D: W! R0 V9 G
// diffusion, then run "updateWorld" to actually enact the! Z. y5 `% ? M7 r$ G) \8 \) g
// changes the heatbugs have made. The ordering here is8 W! U2 a; c% z& w0 b% D+ M: ?9 ?
// significant!. r/ _( A# N# b, a/ a
6 O* L/ l# T' `( _- }+ d9 [4 k
// Note also, that with the additional
" L* L3 L, [: a* i( y // `randomizeHeatbugUpdateOrder' Boolean flag we can; z- r" b; G- A
// randomize the order in which the bugs actually run( p+ X$ `5 C* ~5 p9 `
// their step rule. This has the effect of removing any
! g+ H$ q7 p- }+ v1 c // systematic bias in the iteration throught the heatbug0 K2 f6 F/ z# e* C
// list from timestep to timestep
7 o4 I- b) X0 Q% s% z7 |2 H0 P b1 K 4 G2 D7 v, W+ F$ L" B% T6 D
// By default, all `createActionForEach' modelActions have' m1 T8 [' I/ Q, {, M
// a default order of `Sequential', which means that the
' k1 i0 I2 T; t8 |* ]' _5 C // order of iteration through the `heatbugList' will be/ A- a7 F( A7 T# x# [ f6 Z
// identical (assuming the list order is not changed; d- v& J! a h
// indirectly by some other process).
5 ?6 d) p( a2 _% n. {9 ^
0 w: Y5 e- a1 ]; J modelActions = new ActionGroupImpl (getZone ());7 h0 b: O' Y( o; P0 Y* C
* f1 A9 B& @* ]( {* X; M% {' a
try {
( N. G1 J( v8 x! V8 i# {( k0 }1 j! W modelActions.createActionTo$message
8 @) s' }, c4 w (heat, new Selector (heat.getClass (), "stepRule", false));
3 _. A2 R" j8 D. K$ J% X* ?) R. k } catch (Exception e) {
1 x7 Z3 G& P- B9 D$ G System.err.println ("Exception stepRule: " + e.getMessage ());
. s# X. G! P' W: F }. _1 @) O) Q. K/ h& k: C
8 L3 L, d& N7 U+ @ try {
# |- K7 E( l2 A+ V" T% F. S Heatbug proto = (Heatbug) heatbugList.get (0);& L* W% b5 U: g' P
Selector sel = 8 [; W @5 w& s) n5 U' A
new Selector (proto.getClass (), "heatbugStep", false);
7 r/ M" R- s5 s8 t! P actionForEach =
6 S. X- \4 W* o modelActions.createFActionForEachHomogeneous$call) r/ g% E: b# w
(heatbugList,& u3 J. v6 ~* C6 r- D7 G- e
new FCallImpl (this, proto, sel,# c2 T: C& g+ V5 m2 C) \9 p
new FArgumentsImpl (this, sel)));
( L: D) }8 v; ` } catch (Exception e) {% I( J. x {4 c; ?4 p
e.printStackTrace (System.err);: r6 s! H. C0 L: W8 ]( O
}* w, q1 m; y* P ]$ [4 y+ ^" b- b
; C! R& ]' b! j6 b% T" a* q syncUpdateOrder ();
7 q, j% D! Y% r, V+ j) r4 K8 S7 v
try {
D, n1 i! t! ~& \ modelActions.createActionTo$message
2 Y6 r+ ]) M. a7 ~; g: }- k. _ (heat, new Selector (heat.getClass (), "updateLattice", false));% Z1 }, F1 O& c8 k" P
} catch (Exception e) {
& j. f" q1 t' h( a# p: _7 t. I6 ]$ E System.err.println("Exception updateLattice: " + e.getMessage ());
% A0 R, l. A! b }8 w7 g5 c' M, A5 h- H& {
# V: E% m9 G. _ m4 ?/ B% \+ U% d: `3 i // Then we create a schedule that executes the: c5 l( M7 T$ B8 f
// modelActions. modelActions is an ActionGroup, by itself it* ^7 @; h$ B2 k2 ]& o& S; Y
// has no notion of time. In order to have it executed in
& A+ _: U: N2 L# E# ^7 U1 i5 G- H // time, we create a Schedule that says to use the
- ~0 s: Q; g$ R% |/ z& B" s) s // modelActions ActionGroup at particular times. This* _' `# ^/ p) G0 U
// schedule has a repeat interval of 1, it will loop every
' S" r; N/ u/ n j% Z // time step. The action is executed at time 0 relative to
( r0 B% ]. ^: J* J O. o: K // the beginning of the loop.1 v# U& y( q1 W! U) L+ e+ d5 _
3 D& U% H" X' y: F6 {5 W0 M5 }
// This is a simple schedule, with only one action that is* n$ [0 v. s1 [3 N) Q
// just repeated every time. See jmousetrap for more
% [- [6 \4 V% I. T2 Z+ u // complicated schedules.
% W2 N1 ~2 {; ?$ ^4 t2 I - |! f H8 L6 B
modelSchedule = new ScheduleImpl (getZone (), 1);
( W# ^- ?( W& k; t, J modelSchedule.at$createAction (0, modelActions);
* u: ]# U+ {4 W: ^$ q4 J" q & d5 N; |2 j+ c# w. C
return this;) c" ~6 \$ `) H! G. n
} |