HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 r, j/ h- [0 P6 T ^" C6 F
& k( E( d/ \4 p, N$ _ public Object buildActions () {+ d$ l8 r% w3 E) S
super.buildActions();
# C2 `! ?5 A$ o 5 C$ e4 {/ v0 @( {. }4 O
// Create the list of simulation actions. We put these in2 O+ l. a" u& S7 ^! J9 I8 t
// an action group, because we want these actions to be( y! A' w" w( C
// executed in a specific order, but these steps should3 f$ W7 D/ O/ B$ D
// take no (simulated) time. The M(foo) means "The message% g0 v5 T% k9 A3 L2 z
// called <foo>". You can send a message To a particular
. ~; [" U( S; K* G/ E2 t // object, or ForEach object in a collection.
+ ?# r) i# \: v, h1 `7 c
i8 y7 ?. ]( q: Y* i" \+ Z% r4 n% J& ]. n // Note we update the heatspace in two phases: first run. T1 ]5 H2 p# W* d
// diffusion, then run "updateWorld" to actually enact the
5 e' I0 @8 _4 A( j, k // changes the heatbugs have made. The ordering here is3 j6 C" s5 V% Y. [5 l
// significant!7 k5 d4 B2 g) m% Z, f- F
% A2 k \6 N ]* B3 F b
// Note also, that with the additional
; p4 Y0 v5 I% Y' X8 s // `randomizeHeatbugUpdateOrder' Boolean flag we can# u% @( F* _! k4 n6 i, m
// randomize the order in which the bugs actually run
- j4 r8 Z! L' F // their step rule. This has the effect of removing any$ ?4 \- H) S7 ~& R/ C
// systematic bias in the iteration throught the heatbug/ G5 N- r. m U* p6 |
// list from timestep to timestep
4 ~. y( E, T( D# _/ h w$ i" W
1 f7 b" A6 X; U% q // By default, all `createActionForEach' modelActions have
4 g$ U Q4 p/ }$ L // a default order of `Sequential', which means that the- W0 n& y! \% s# S1 b f, Y8 Y1 Z0 Z
// order of iteration through the `heatbugList' will be
. V6 A" Q( f5 j. o, X3 B: w0 S // identical (assuming the list order is not changed3 B0 _* P$ a' w3 Z" L4 [7 h: X
// indirectly by some other process).
2 @3 O( g8 m/ p" ~ 3 G2 z1 C: P( u
modelActions = new ActionGroupImpl (getZone ());
5 H- u. B4 V2 C% h+ W2 W
! g6 K" y: i% E% s$ s0 l try {1 s$ e9 k* @9 {
modelActions.createActionTo$message }0 c4 Q8 S, ^( H
(heat, new Selector (heat.getClass (), "stepRule", false));8 y, w: v) N+ N( i
} catch (Exception e) {
2 q9 v) R1 a+ k0 o7 d# |5 G! H System.err.println ("Exception stepRule: " + e.getMessage ());# [ k: e( t+ w: c( y |+ Y$ F
}& M7 I- Q! M2 `( S' c& G
/ c; h' g3 q- H! G try {9 D2 W) z+ w4 F* g" B+ L
Heatbug proto = (Heatbug) heatbugList.get (0);
0 s% [ x# ]( g Selector sel = ; c( R. a6 E! `1 u
new Selector (proto.getClass (), "heatbugStep", false);
' y1 t( ?3 B* b% N' G [& { K8 r* J actionForEach = M% c# s& N4 g" y t
modelActions.createFActionForEachHomogeneous$call: u$ W+ o8 E; _
(heatbugList,
9 [/ U, g* i! K3 K* k U new FCallImpl (this, proto, sel,% r! Z. @7 N% ~2 W8 I# }
new FArgumentsImpl (this, sel)));
5 ]& n( A' x" d$ _3 b. { } catch (Exception e) {
1 @2 X+ H5 L5 @8 \. d) j' W$ d e.printStackTrace (System.err);
( p" T' V3 a/ n% T: D* J0 X# R }
+ U8 ?$ D/ L3 T/ M0 G. R
# v( `0 g7 Q# W! K syncUpdateOrder ();0 a6 C# R _9 Y U2 k
, _$ v( X3 e; ]: R try {
- i/ C) S) G: L# E3 t- M# T. r modelActions.createActionTo$message
# K+ }% L3 d W* r0 G( s# j: c D (heat, new Selector (heat.getClass (), "updateLattice", false));& `" S& ^9 g( `/ a, B9 c# j+ U
} catch (Exception e) {
: u; o; R8 w2 [# Z& b' O) ~# O System.err.println("Exception updateLattice: " + e.getMessage ());
: t, n" p: H) y( }, c8 \3 a }6 N3 f6 u; T) r& o3 G1 V4 E+ z
, C2 I/ f) i9 E" q( Y! d2 X // Then we create a schedule that executes the9 T. J6 } G( p! j2 m# Z+ y
// modelActions. modelActions is an ActionGroup, by itself it* G+ J% A' Q4 @ B* S) V7 Y& k
// has no notion of time. In order to have it executed in
& m' a# V, D9 m: u6 N: P6 ?' Q // time, we create a Schedule that says to use the3 X/ I# E& M' ]" n! ^) q5 ^
// modelActions ActionGroup at particular times. This
$ g+ R4 Q8 X) E) c" ~. X E // schedule has a repeat interval of 1, it will loop every* t/ C7 K1 N) w4 M) T/ k
// time step. The action is executed at time 0 relative to
, n' _0 Q9 O) d2 q // the beginning of the loop.: D3 o6 i) o! |0 ~( V6 F8 G
# K0 i, }! q$ w: z: \$ v- F0 q // This is a simple schedule, with only one action that is
/ J1 [7 n2 A: D( _" z& W- J // just repeated every time. See jmousetrap for more+ P* r2 v& K* m6 M% J
// complicated schedules.0 `/ N2 g' O2 M( N) B# z
9 \3 u) Y6 M9 d7 y- J- e, N* A modelSchedule = new ScheduleImpl (getZone (), 1);; T0 |) T7 A5 s8 L3 I9 A
modelSchedule.at$createAction (0, modelActions);
; J5 Y0 E1 D2 D3 K
, Z% f5 k& ]0 `& y6 z return this;& V% a& s7 Y" Q+ X7 X& p' X( y
} |