HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: \. y! N8 K+ t2 |$ D7 h
. L& }, Z( }# h. q# |( Y6 u/ |- d0 r public Object buildActions () {
* R* X# g1 V9 W, c7 g! g4 } super.buildActions();
; h9 a9 ^; w* Z2 V# Z
) l+ l- c2 H+ y9 c // Create the list of simulation actions. We put these in
. z, B7 z; b1 l2 ]/ r8 m8 T7 j, h- i // an action group, because we want these actions to be8 u' N2 G5 a( g" r% A3 Z
// executed in a specific order, but these steps should
8 S2 C) X% U* b6 S8 K, U; k- j // take no (simulated) time. The M(foo) means "The message6 T! E" T: a0 s* U' w1 E) i7 S
// called <foo>". You can send a message To a particular: j3 x4 A( K; ?6 t9 \
// object, or ForEach object in a collection.
0 @% T) c, R3 n9 c , H. I5 b1 f/ n ?3 e
// Note we update the heatspace in two phases: first run3 C, `, }' f! r$ E) {4 f7 W- ]$ f
// diffusion, then run "updateWorld" to actually enact the
2 v f c; j8 `, r // changes the heatbugs have made. The ordering here is
( |) e) O* a! ^( k8 G // significant!
3 x! R W+ N7 `$ U! [7 q
8 i5 ]& l) x9 Q; U, c4 \ // Note also, that with the additional
+ q/ S2 o, C6 }& r7 ?) k: a; H // `randomizeHeatbugUpdateOrder' Boolean flag we can
( b' C) W- {0 r // randomize the order in which the bugs actually run; ?3 f' h8 L' r6 |/ X Y8 G
// their step rule. This has the effect of removing any2 b4 T4 |" L+ ?8 j4 L6 y) I
// systematic bias in the iteration throught the heatbug1 r i4 O( S* H$ p$ A/ Z2 `# h
// list from timestep to timestep
4 `* L' w \2 q9 _( h0 ^ ( X* T) ?" u; L. ?
// By default, all `createActionForEach' modelActions have4 _, m6 B3 m ~6 T7 i2 H& z7 d, `- y
// a default order of `Sequential', which means that the+ d; ~. c$ R0 {( X
// order of iteration through the `heatbugList' will be
: l7 ?! h6 n% j7 P // identical (assuming the list order is not changed* O; E' W( G2 l: k5 C
// indirectly by some other process).7 U% X0 M( Z6 @* m: E: u- |1 ?" G
- \- B1 D, f7 G& @ modelActions = new ActionGroupImpl (getZone ());
j+ B# S0 l* `9 A( h
6 H+ P0 m6 L3 Z* S9 a2 h0 [: {! S try {' u+ v! L) J; Q; Z( p
modelActions.createActionTo$message
+ M, }& c' K$ y5 P' k8 R (heat, new Selector (heat.getClass (), "stepRule", false));, B q# |( r6 I3 h$ y6 L* ?. Y% G1 w# D
} catch (Exception e) {
3 Z/ _$ w( o1 S! e System.err.println ("Exception stepRule: " + e.getMessage ());3 E# M" u& w7 ?
}
6 k$ |8 n1 @! ^* z$ O) s& s/ x# H0 I, ^- k7 V
try {
: L9 p! z: |( G4 c5 \ Heatbug proto = (Heatbug) heatbugList.get (0);
' v6 j ~ E5 a+ a Selector sel = # u2 ^0 b* v6 k5 G
new Selector (proto.getClass (), "heatbugStep", false);
: }1 {$ ]9 C) v/ J v# [ actionForEach =5 @" C+ C8 G+ J% P
modelActions.createFActionForEachHomogeneous$call
+ |6 _+ Z' B0 w# V% `0 T: y (heatbugList,
2 [* Y$ g6 V7 z- v new FCallImpl (this, proto, sel,
$ r3 z# e6 y A0 A new FArgumentsImpl (this, sel)));1 [1 \ l. \& \9 R4 m8 K
} catch (Exception e) {! W/ q5 _: v" x, g/ I" M
e.printStackTrace (System.err);
- ?! J; l# F: O1 s }# |$ l/ K: e6 d+ e$ \% F, _
1 E8 o9 w1 E8 q% ?7 }4 z syncUpdateOrder ();
$ K. K. T% t* r i+ O( R% W3 l5 a/ Y" C
try {
* W# ~" G7 c& a modelActions.createActionTo$message
; I* A9 X1 D+ Q9 \ (heat, new Selector (heat.getClass (), "updateLattice", false));: o+ q. x( I" ~) g5 k" \! D
} catch (Exception e) {
/ P0 S5 P8 q% c, d$ @: F System.err.println("Exception updateLattice: " + e.getMessage ());) e0 G0 ]8 ^8 l4 _* f
}3 n, U: T4 x& X8 p
+ C" e. g4 C' q. m, ^
// Then we create a schedule that executes the2 S0 U, y( o r4 l/ O
// modelActions. modelActions is an ActionGroup, by itself it
1 B' x, W7 `8 Q# }/ e' @ // has no notion of time. In order to have it executed in
6 ^" v% t" ]$ t# B0 Z // time, we create a Schedule that says to use the% I; {3 t7 i% v- {! U: }* n
// modelActions ActionGroup at particular times. This' L; Q% l: w$ A7 n/ n+ p: f3 Y
// schedule has a repeat interval of 1, it will loop every% a/ |& w; b8 `( ]$ k2 |$ w5 d# f
// time step. The action is executed at time 0 relative to+ _2 `7 U2 t9 p* E3 l/ V
// the beginning of the loop.1 |+ o. z( S) N! k6 I8 P; K- x
' o6 w$ e1 z- H8 d3 F // This is a simple schedule, with only one action that is& v p( `+ P, `
// just repeated every time. See jmousetrap for more+ n$ s! Y/ F/ i. N4 [
// complicated schedules.
7 R. X, H/ P3 }& r4 a; e7 p
9 v2 O# J! W! v- V, u modelSchedule = new ScheduleImpl (getZone (), 1);4 c' J5 q6 T8 N$ y0 k/ E; \4 V* b
modelSchedule.at$createAction (0, modelActions);
l3 q d. N( M3 _$ X
) T& A3 z) k( I# o* w4 d A* B return this;
: q" x" _6 E& E) c- K& X: r9 K) I3 u } |