HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 t) C% O) g& h8 x% C( O' D) f
9 W& \2 Q) C5 A# V public Object buildActions () {
% D6 r3 b. ]9 J7 s super.buildActions();
; n& f0 [- h8 h% C
/ [, A0 ^, [& g% K- Z. {3 s // Create the list of simulation actions. We put these in" h o# H ^- u% u% w
// an action group, because we want these actions to be
; i7 N6 x( W& ^" B // executed in a specific order, but these steps should0 Z( T8 j N* v% e: A
// take no (simulated) time. The M(foo) means "The message
4 Y6 h, k1 Y: E7 [ // called <foo>". You can send a message To a particular, t o2 v' @: e
// object, or ForEach object in a collection.
! ]- x0 k0 u0 M6 W! y+ X
# V' d; ?' u! K+ U$ k // Note we update the heatspace in two phases: first run: B8 v% q* ?2 O" b. ]4 a. x
// diffusion, then run "updateWorld" to actually enact the5 x" Z5 v$ \: u8 _2 ] @3 x; b5 b
// changes the heatbugs have made. The ordering here is
! w3 r; }. g' V* a: n% o // significant!
" G" M! N' s# x) b9 d: a
g4 g3 q& y' ~, H7 z' w // Note also, that with the additional. Q8 `" y# k0 _0 @; H4 P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 R* E" T0 O" m9 O9 q0 `9 f* J' w+ A // randomize the order in which the bugs actually run; u0 T; L5 C8 x. P) F7 O4 }
// their step rule. This has the effect of removing any3 i& P9 H3 {& q: j& ^" W
// systematic bias in the iteration throught the heatbug
; t1 w7 b: j- W" q // list from timestep to timestep
2 e: Z! z4 x- \. D' S' g: j, B) B
' W) q+ v2 s) F) S: A // By default, all `createActionForEach' modelActions have- ~5 X/ U- k. {" G' J7 }& n/ Z8 q
// a default order of `Sequential', which means that the" [' U: b3 y! J
// order of iteration through the `heatbugList' will be
' \. q* P: Q! l# x$ b# z // identical (assuming the list order is not changed! e, t6 J, N% V2 q: M3 P3 j
// indirectly by some other process).
$ U/ r- ?, I) R+ Q6 [* D$ ] / n/ I$ r( c; p/ C; W
modelActions = new ActionGroupImpl (getZone ());
( t: F; Z0 ~( l. C% O. O$ G. S
/ K8 \6 n; }4 ]/ V* [ try {) x& K, ?$ S' V* z
modelActions.createActionTo$message
6 f9 N0 m8 [, N6 s+ z* g& N7 w (heat, new Selector (heat.getClass (), "stepRule", false));
6 S+ }( X" B& ~: a* w1 G5 s0 |' @ } catch (Exception e) {
' w; L3 Z" ]5 ]1 }$ R5 @0 i System.err.println ("Exception stepRule: " + e.getMessage ());
! i. r+ _7 _$ c* R" G+ c. y } T* G) ^ P5 t; R- K; j' r
8 D( ?% W! Q; e- e, x) O
try {; h( ? c/ f; E
Heatbug proto = (Heatbug) heatbugList.get (0);: l) d1 _% B# R/ U4 _$ p. ]: r
Selector sel =
+ g5 s4 J, o* O0 n8 V* A$ t new Selector (proto.getClass (), "heatbugStep", false); W" M2 i4 p4 T& `% C4 Q7 j
actionForEach =8 W& \* i | `
modelActions.createFActionForEachHomogeneous$call5 z7 i; d F5 l, U. E7 e* L
(heatbugList,$ L1 C/ N# } c- T4 c2 w c/ N; k
new FCallImpl (this, proto, sel,; G; X2 f# w+ M- D
new FArgumentsImpl (this, sel)));! }: `, }# q9 }7 `0 S
} catch (Exception e) {- r$ q& x- k& c( {- I
e.printStackTrace (System.err);3 ]1 d0 h; E2 k( G" I0 {
}
7 P4 k9 X, g/ S) ~4 y
' G2 M! p0 c% u/ Q syncUpdateOrder ();9 \( ]( p/ a+ {; ~) P9 t d
9 U; K o& a3 {( k8 o
try {
. X; U+ y6 J/ j6 s* \* e modelActions.createActionTo$message
9 g* h S4 m! [9 r' [! B (heat, new Selector (heat.getClass (), "updateLattice", false));& h4 H1 W: ` O, J1 C7 T
} catch (Exception e) {) w6 z$ m" Y3 i6 q0 d1 @. `7 X
System.err.println("Exception updateLattice: " + e.getMessage ());
2 ~5 c" R7 x0 k7 @ }
# x1 u3 R( [( N; u- Z 6 b) Q$ s" t! O* b
// Then we create a schedule that executes the4 R3 Z7 e( }2 B( Y! d+ G; h/ X
// modelActions. modelActions is an ActionGroup, by itself it# w/ k) w9 d( h
// has no notion of time. In order to have it executed in
$ X. r0 P0 G Y D // time, we create a Schedule that says to use the( ^2 V, Y% V- Y4 V; X/ i" V M
// modelActions ActionGroup at particular times. This9 S# P6 D; g& J5 g! B) X1 T
// schedule has a repeat interval of 1, it will loop every
" \4 [ O9 W+ l* @7 G8 `! o8 E+ K3 q // time step. The action is executed at time 0 relative to* X7 N+ D0 I$ V1 a! d
// the beginning of the loop.* Q# _0 @5 c+ g6 k8 c0 J
' _: o3 [& M" y6 g4 S // This is a simple schedule, with only one action that is8 e# y+ B# p0 f+ c, H. d1 e
// just repeated every time. See jmousetrap for more {! o9 r' c- z1 g) h: f; {+ z
// complicated schedules.
* k; Y1 o/ M% T0 Q& j. {. X - V$ T: Q( }, r3 i$ d
modelSchedule = new ScheduleImpl (getZone (), 1);) G, c$ Y9 I& E% C4 z/ R
modelSchedule.at$createAction (0, modelActions);+ _+ ?7 Z, |4 A7 w; x) J1 u
& H% y1 l7 `# ?3 n+ p0 D. l! d return this;8 O E6 J( m ^- K) P% V* i6 H
} |