HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ v$ M. k: G: V2 K) ]. u1 x. w) N
public Object buildActions () {
9 z5 w, P W! ?* }8 J super.buildActions();0 S8 X* b5 M! M1 A. e0 L3 J8 H
' j2 @+ p) U, F! O // Create the list of simulation actions. We put these in
4 v' y; [! {9 U // an action group, because we want these actions to be
; p4 O0 K- ?0 }$ }, q // executed in a specific order, but these steps should5 {4 P! k# p) B' y0 M1 n [
// take no (simulated) time. The M(foo) means "The message
. p# d! ?. P# E7 c( ]- Y2 p& n // called <foo>". You can send a message To a particular' X( k5 [& I5 ]6 R1 w# h
// object, or ForEach object in a collection.; e d0 r7 B1 d; e! t
; g8 `. o+ v7 z) }$ ?* G* h // Note we update the heatspace in two phases: first run
6 _# C+ t; ~9 j- X ~ // diffusion, then run "updateWorld" to actually enact the$ \0 S3 |1 y3 X- n8 u8 `
// changes the heatbugs have made. The ordering here is6 a" M M S5 L3 Q7 Y
// significant!
' \7 k/ z1 W/ \7 D
' F% o6 k8 a9 l; P // Note also, that with the additional& C# P$ ~3 E8 v) D# W- H- v* h
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 l) r* J$ U+ q8 |2 J* }3 o // randomize the order in which the bugs actually run
5 ~! t- ~. R6 N7 i9 j( |; j3 u // their step rule. This has the effect of removing any
* H j. E/ h& g8 d! } // systematic bias in the iteration throught the heatbug. K' G& g0 j% q/ o" i; j
// list from timestep to timestep5 v3 I' x. x% ~7 W
$ p8 n0 @2 U% h0 m; |. K, T/ _ // By default, all `createActionForEach' modelActions have& r$ C. c2 ]1 K/ q: t
// a default order of `Sequential', which means that the
; @9 t5 e' T$ ~0 | // order of iteration through the `heatbugList' will be" c C. W8 ]( N5 Z7 X. `
// identical (assuming the list order is not changed
. R9 h* F z) M3 z; | // indirectly by some other process).
( U6 E3 y- X: s$ k4 p4 h: f : l9 }5 W6 B; c: @# g3 V$ H
modelActions = new ActionGroupImpl (getZone ());/ t5 c2 i1 w4 F$ ~7 n1 E
' Z, m% [" t5 H3 Q' | try {1 T, {5 M% {" `6 L) a
modelActions.createActionTo$message
7 V' R; o# a+ o4 |* C" Y. c (heat, new Selector (heat.getClass (), "stepRule", false)); x( Y/ D* \2 Y# ?* [8 u
} catch (Exception e) {4 c3 T; S2 o" ?5 z- q
System.err.println ("Exception stepRule: " + e.getMessage ());) i: L) t5 l+ N
}
1 Q! ]( @7 {2 X% w( i& h2 k- ~
8 ?+ U% @7 m. I7 Z/ C; }, c try {
5 E8 _5 E8 j( D- W& i5 T3 } Heatbug proto = (Heatbug) heatbugList.get (0);
0 L' ]! x$ W7 h0 W8 R Selector sel =
: u0 ^: F# s$ q: z: l new Selector (proto.getClass (), "heatbugStep", false);
; X: z E; |( O0 W& G: x1 m' y" V actionForEach =1 Q) ~# g; K: a- d) F
modelActions.createFActionForEachHomogeneous$call, D% I# L: i+ M; c
(heatbugList,
3 c0 L' P& Z+ Z S& \+ M$ a8 z new FCallImpl (this, proto, sel,
" \0 n2 K Z0 q2 o2 Z7 { new FArgumentsImpl (this, sel)));( P) H+ W. l( n# X1 I, D0 X
} catch (Exception e) {+ h5 f7 M- D! _9 K
e.printStackTrace (System.err);& C( d4 t. h4 h% E% `
}
% B/ y- F0 u( Y1 p5 ?7 Y' k 8 J- F! D3 ~. x
syncUpdateOrder ();
- U* C9 |: t$ o' b8 p& n4 z+ Q* ?0 o6 i3 r7 U4 T' K0 r0 s) |9 f
try {
- r5 `+ Z" k$ k, g' S" v modelActions.createActionTo$message 5 M3 t/ R# q5 q! G3 I6 e" x
(heat, new Selector (heat.getClass (), "updateLattice", false));6 t, C, O) F6 C( E4 B- x- R" \$ K
} catch (Exception e) {
) A- J" O, Z, t, a4 V System.err.println("Exception updateLattice: " + e.getMessage ());
2 k0 N0 M6 X4 r7 Q }
2 E, r0 u7 G' K I b4 i 1 k2 o! o0 R! \9 H
// Then we create a schedule that executes the2 e. R8 F! d4 _9 s6 W! V
// modelActions. modelActions is an ActionGroup, by itself it
/ E' D, B/ h" W: J9 k, g // has no notion of time. In order to have it executed in# T5 `$ T3 w$ j. D7 n H) |
// time, we create a Schedule that says to use the) c, M: h, p3 x$ C) H$ x( ^# ?
// modelActions ActionGroup at particular times. This L4 L" O, e& v1 H0 ~ C1 E# p) [. q
// schedule has a repeat interval of 1, it will loop every
" s6 r a2 A8 P& w/ I0 {5 D // time step. The action is executed at time 0 relative to2 J& \' B! p2 R0 J
// the beginning of the loop.
3 A/ D: m/ B& I5 G$ q6 e A# i6 ^# Y- t4 l' v/ S1 L4 _" ]$ E
// This is a simple schedule, with only one action that is9 t4 |! |1 s% B' R* s
// just repeated every time. See jmousetrap for more
( [0 P H" U: w$ Q // complicated schedules./ v! h& V( \1 ]8 W7 Z- k! t! Z9 R
( m9 S7 M+ U) D% l+ x7 v$ d
modelSchedule = new ScheduleImpl (getZone (), 1);7 g: ~& A1 V: h: {! Z* M
modelSchedule.at$createAction (0, modelActions);
0 l9 a9 S' W0 B& | . L4 f4 J" x* D3 U8 x
return this;
4 v; g( y9 I a3 |- a, f } |