HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 V" A+ t. p e
8 z; {' |) G+ [3 ~' O public Object buildActions () {
: s6 W/ m: `" J. t1 R super.buildActions();1 k/ s& X" r" B5 Y
5 V% s5 ~* d. [* x# x; d // Create the list of simulation actions. We put these in
3 n+ X8 X( h0 R // an action group, because we want these actions to be2 z9 t R/ c$ O5 `0 I% A
// executed in a specific order, but these steps should' h6 R( [+ M) T; q) D
// take no (simulated) time. The M(foo) means "The message) v9 H6 f( V5 J. h
// called <foo>". You can send a message To a particular
, I% L8 t7 }6 J% ] // object, or ForEach object in a collection. p# p5 o; ~9 n$ j: _1 w! s
) U- m$ Y* s4 X
// Note we update the heatspace in two phases: first run
) ~4 I& |* Y' y9 m. U // diffusion, then run "updateWorld" to actually enact the
) A4 ?# u' W; b3 K' f: o2 X; r& d // changes the heatbugs have made. The ordering here is
- z9 M# f' c q6 D' r* C // significant!
' ?# `7 H% W6 J2 ~ ( d7 S0 K- p) I/ Z6 P. \
// Note also, that with the additional
; [1 U |# n4 s/ X // `randomizeHeatbugUpdateOrder' Boolean flag we can+ i' T- z! m6 a6 O) R; P
// randomize the order in which the bugs actually run: l- N4 T+ s; l! R( z' S& k# J
// their step rule. This has the effect of removing any n4 q) O `; c
// systematic bias in the iteration throught the heatbug0 j% ]: h2 l. k+ x1 S$ v6 J. g. w
// list from timestep to timestep! c. u# A# F6 s! V5 }1 D
6 b/ l5 _* ]' Z$ q // By default, all `createActionForEach' modelActions have, k% ^* U( K7 z- n1 N
// a default order of `Sequential', which means that the5 u1 U2 }, ]- A2 p4 o7 G4 a/ _. F
// order of iteration through the `heatbugList' will be& Z+ z# S4 c6 J! P, H, i
// identical (assuming the list order is not changed
: C! b: g! T( E" r$ r // indirectly by some other process).6 O3 y! [% J" D; |3 t& t
% H9 V4 q3 Q, \' z modelActions = new ActionGroupImpl (getZone ());
$ H l, Z% ~7 w2 B3 o
( ]5 I* {" I+ |2 z try {
/ n: c# P( u+ J" E# f/ P, o% T modelActions.createActionTo$message5 ?9 C E* |+ e: ^* N. P" I
(heat, new Selector (heat.getClass (), "stepRule", false));' K4 B7 X$ ]7 u6 }: f- z6 E$ k. I- X
} catch (Exception e) {1 b. |& f6 v1 D& i3 p+ M
System.err.println ("Exception stepRule: " + e.getMessage ());# c, |7 C9 v; h) F) l+ }- a' K
}
9 ~ {6 j( R n& Z" f& X/ Z- b- W/ g) U6 Z# {1 e5 o! I
try {
; A: n. Q' M* x( J* v4 l Heatbug proto = (Heatbug) heatbugList.get (0);5 F+ p# O- ]9 E) S @
Selector sel = m2 ^) Q0 o) Z
new Selector (proto.getClass (), "heatbugStep", false);
2 \$ F1 N* |' v' I3 m) r actionForEach =- P: u W5 m7 r8 _5 E; T; w
modelActions.createFActionForEachHomogeneous$call
: x$ u7 `0 k" I4 y, o (heatbugList,
' X$ z1 O t$ A; r new FCallImpl (this, proto, sel,
/ _3 H9 W* O. Y8 h$ ? new FArgumentsImpl (this, sel)));- Y4 r3 q8 q* \0 M/ W8 z. x
} catch (Exception e) {3 i* l' g$ v& ~2 Z# `
e.printStackTrace (System.err);
$ F5 h% r- R5 |& j3 s/ f" U0 D+ C }
2 Q# j8 J& b2 @; O$ Z5 d4 j
. R3 {7 u7 y6 o3 L9 _$ p/ T, l syncUpdateOrder ();
" {3 [7 X: H) E" _3 r! ^6 | Y; P+ o3 v+ q
try {
+ n! p: Y. i# k! ~4 ?4 b& b( q modelActions.createActionTo$message
/ E [$ ^! f1 Q* M" ~6 J2 x1 i (heat, new Selector (heat.getClass (), "updateLattice", false));+ E: Q9 N0 h4 `" D3 v2 ^( B! L2 \
} catch (Exception e) {
9 q9 R. x5 z7 {) Z System.err.println("Exception updateLattice: " + e.getMessage ());
* M$ q) w9 x8 n# c1 d8 i }
4 K6 U! P6 T% A3 b& q# n, K - `7 F- ^* ]: ^: J/ I
// Then we create a schedule that executes the
' f4 Y( {7 P2 B5 v // modelActions. modelActions is an ActionGroup, by itself it
; Q" L' _( O5 q* O6 e1 V+ t0 ^ // has no notion of time. In order to have it executed in1 S9 i2 c1 ?1 a: m; ]8 f+ d; M8 A
// time, we create a Schedule that says to use the
) H4 ]* c% c$ w2 t // modelActions ActionGroup at particular times. This$ R, C. n1 \% g+ S9 r, p5 ]) f7 k
// schedule has a repeat interval of 1, it will loop every
1 [: w" z7 b7 o // time step. The action is executed at time 0 relative to; x, R2 n6 T* c' |0 z
// the beginning of the loop.# Y8 j0 d8 y5 }' _/ u
: U! G# n, c N
// This is a simple schedule, with only one action that is
* p5 O' z+ w7 q, j0 g // just repeated every time. See jmousetrap for more
s8 M; }( j7 Q3 S // complicated schedules.
/ z( P( `' Z+ D K- k 2 t/ _2 b7 f, t2 x) \! x9 M5 R" a
modelSchedule = new ScheduleImpl (getZone (), 1);8 t. C4 U- Z9 N
modelSchedule.at$createAction (0, modelActions);7 ^) Y* ~# x" \2 V
2 h8 |+ H7 C1 b7 t* Q2 F' [
return this;( a2 K/ [/ h, }
} |