HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; ~0 }( U0 L+ t; f3 Q- w ]2 o: v6 _" X5 J. n9 {& F
public Object buildActions () {7 @6 j/ c ~" s+ J8 ~& h7 W" B
super.buildActions();
2 {5 w7 X8 `, ^8 W: u # _6 Y! H' }/ L
// Create the list of simulation actions. We put these in- C) H8 \6 B2 {1 ^
// an action group, because we want these actions to be
) K9 ~5 z6 m1 p. s% w // executed in a specific order, but these steps should7 O, c7 \. \. I8 @; G! J9 R
// take no (simulated) time. The M(foo) means "The message
4 V* S6 o& R6 w y, H // called <foo>". You can send a message To a particular
' k9 M, \# }- I/ H# |3 Z- m4 c* J$ { // object, or ForEach object in a collection.8 M' b% ?' N- s$ i- V/ {6 k
0 ?: {. x8 d* e! y // Note we update the heatspace in two phases: first run
( H% i2 B3 j8 q4 h // diffusion, then run "updateWorld" to actually enact the0 u( G+ D x1 W7 P( i9 ~( p
// changes the heatbugs have made. The ordering here is: A b) x( g! V
// significant!
1 C& _1 Y5 \) I. s 7 n1 ?0 Y6 y0 e& [2 O2 z3 d
// Note also, that with the additional/ v O( n3 @9 K; @, V$ s
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 u F" x. U6 v/ ` Y
// randomize the order in which the bugs actually run
, t. e# E: c+ t& V+ V$ F // their step rule. This has the effect of removing any
4 J* o+ i' m4 Q/ g: X // systematic bias in the iteration throught the heatbug
G* {3 ]( Z% e8 d; U // list from timestep to timestep
7 v! M$ Z& c- j& D8 Y
6 [; E5 R5 \$ u2 Z. S; O // By default, all `createActionForEach' modelActions have) ]% c$ r; I; b3 Y/ o
// a default order of `Sequential', which means that the4 J. v W" E/ |: {; m; n; q
// order of iteration through the `heatbugList' will be/ V w+ ~/ _5 j
// identical (assuming the list order is not changed
0 V% o, t( D# g2 L9 ?3 v j // indirectly by some other process).
5 r2 t2 v7 d2 y
, Q+ @# F, s, \4 q. s3 u1 B modelActions = new ActionGroupImpl (getZone ());
, i/ U% [: S9 B6 [) ^% t/ L% x' l) l7 S7 Q$ x
try {
$ [ k: R# r9 [% a modelActions.createActionTo$message2 \' v# n" p* t$ b7 S" L; ^5 U
(heat, new Selector (heat.getClass (), "stepRule", false));% h$ ` [" |4 }" B# L4 s& u/ v3 ^
} catch (Exception e) {8 e% x$ C# _8 f0 J( o
System.err.println ("Exception stepRule: " + e.getMessage ());
, g d0 ^+ \7 ?; ~5 Y }7 X" \ c" a) | W1 g4 W; B `
/ y1 L' M/ X, B. R4 R% ?9 `1 Y try {6 \) x0 Y# j8 t
Heatbug proto = (Heatbug) heatbugList.get (0);3 W' b4 F$ F) L2 u; }
Selector sel = 9 G* e- r* q. g
new Selector (proto.getClass (), "heatbugStep", false);6 M- k0 Z# a# \
actionForEach =. }/ p0 [! q7 E3 K6 y( r# h) c
modelActions.createFActionForEachHomogeneous$call
) O3 E2 p5 R* W) t; ]8 R2 W (heatbugList,
* R) P; j; { x! Y6 T) O" _ new FCallImpl (this, proto, sel,
6 z4 a* |& B5 [! o new FArgumentsImpl (this, sel)));! s* M5 d; ^& T: E! p/ q" Q
} catch (Exception e) {
; I* X. j7 e8 Z2 t6 Q) F: ` e.printStackTrace (System.err);
' W$ z* x9 b9 O9 C8 a) h4 ~ }
5 H; c: _- i4 Y9 e! m $ R M' O( P6 @# W* k
syncUpdateOrder ();
5 f& }4 P9 a7 M1 T3 Y8 H1 V
+ @8 `6 M. f* c" A8 o T try {8 Q6 n! ]; X7 `2 u2 {
modelActions.createActionTo$message 2 ]# T1 G' H1 _$ I9 p) j( \
(heat, new Selector (heat.getClass (), "updateLattice", false));$ |6 q3 |( t1 P& D: _3 G
} catch (Exception e) {! c% W* }* [% G7 x
System.err.println("Exception updateLattice: " + e.getMessage ());6 E C* A7 n0 L3 c" r
}
2 i' u* T$ D. q) I0 _ / l- p; l! r) L1 ]& @: W
// Then we create a schedule that executes the
4 Y' i" h6 {3 M3 T* L2 m // modelActions. modelActions is an ActionGroup, by itself it
/ v6 b, M1 S0 a: t // has no notion of time. In order to have it executed in2 s2 [6 ?! m7 t# R1 N$ B4 }
// time, we create a Schedule that says to use the
T. _" ?% a$ P5 v // modelActions ActionGroup at particular times. This: _( K, E3 O! L' N
// schedule has a repeat interval of 1, it will loop every
D' F$ L3 r8 j, t; g1 { // time step. The action is executed at time 0 relative to
- a v1 E' ~4 @! j s // the beginning of the loop.$ T0 R/ X+ Q1 T! M( W% G4 b
; w% z( t' l1 S" q
// This is a simple schedule, with only one action that is
* T" t' r. d* a/ N // just repeated every time. See jmousetrap for more
V, x5 Z- e; P/ p: d; w! x // complicated schedules.
; }* B6 w% T+ Q/ p
: `. \. T) W! r( ^, e/ Z6 T) e modelSchedule = new ScheduleImpl (getZone (), 1);
% B, x6 M) _: W5 V modelSchedule.at$createAction (0, modelActions);
! X3 l" v. R6 a% R( |; Z$ c ' s9 r# u- O. Y- x& { G% J4 O/ `
return this;0 b, _3 Z, s2 k1 ^0 D# L
} |