HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# W! i1 q. V3 ]' v
0 h+ H: F2 a; J5 }5 z public Object buildActions () {
/ \# a5 ^* A, h; J# V super.buildActions();' v j' D! w4 p$ t o8 d1 f6 y
t, E* L4 }1 v0 s! Z // Create the list of simulation actions. We put these in; T$ s7 |% `7 I. N" H1 s3 _
// an action group, because we want these actions to be; k* W0 N& F- j: E \/ x
// executed in a specific order, but these steps should
6 h6 J. g* F6 }' ?- m. m // take no (simulated) time. The M(foo) means "The message+ p, u% s7 c5 g* V, \
// called <foo>". You can send a message To a particular, @& v! S. E) }+ C- M3 `/ s: v
// object, or ForEach object in a collection." X( H$ N; G$ ~- \; L
7 | q! \# M! w) a6 c0 S
// Note we update the heatspace in two phases: first run
! A6 e9 ]6 f9 ^ // diffusion, then run "updateWorld" to actually enact the
$ f! {9 H' e5 c2 h: G // changes the heatbugs have made. The ordering here is
8 } ?2 q6 Z% P# E // significant!
5 O3 N& ^! c, J* f2 P
; t% Q8 [8 u# e/ ~( u% p, O# J // Note also, that with the additional' R9 s2 J2 n# e* X: W
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 r. Y6 k$ z- Q* }3 c$ C // randomize the order in which the bugs actually run; ^' _9 [& }' |
// their step rule. This has the effect of removing any
) p) @: P) G& e* j9 c! N8 | // systematic bias in the iteration throught the heatbug
4 Z0 `3 D. r5 } // list from timestep to timestep
- W# h8 Z) W( Z C }$ p3 e* t% x
m; f Q. q. {4 ?, { // By default, all `createActionForEach' modelActions have, T: z w8 g- X5 X9 E- W
// a default order of `Sequential', which means that the
1 R" G L* h. f6 V' m // order of iteration through the `heatbugList' will be
- E- q' J" J: H9 ^4 J; C // identical (assuming the list order is not changed# b. M' S( V+ j) `& B
// indirectly by some other process).; J5 n; ?: D, Y9 o1 G
2 m8 S. m$ d. @9 u
modelActions = new ActionGroupImpl (getZone ());% E+ z/ q8 B2 d/ O; q& n
! B. u4 `' a9 ]2 ~
try {4 ~9 G5 b% Y9 u1 b* v5 J2 w
modelActions.createActionTo$message
$ G, A7 O2 y7 O# {/ r" o (heat, new Selector (heat.getClass (), "stepRule", false));* p2 g; |7 u2 g1 q$ H& Y5 r; I
} catch (Exception e) {. N$ k& A7 g& M6 u$ M
System.err.println ("Exception stepRule: " + e.getMessage ());3 B4 a+ u$ J" G( k9 e# u/ V0 b- b% R
}0 r6 p* T9 t- A8 _2 b
& v" Q8 ?1 m$ [$ n( ? try {: u+ B9 n1 y, L+ V: O% {! ^
Heatbug proto = (Heatbug) heatbugList.get (0);
$ I) j1 Z* u% _* M, s Selector sel = $ E' _% L- y+ w' i) H: M8 Y9 U6 F
new Selector (proto.getClass (), "heatbugStep", false);+ e f8 P5 Q" g6 K
actionForEach =9 Y- u E! O3 ~, |' x
modelActions.createFActionForEachHomogeneous$call
* d; {( W) H; n* t: m% C/ Q! Z1 U+ O (heatbugList,: O4 x5 u+ ]. i4 @2 I
new FCallImpl (this, proto, sel,
/ l/ D! _- k+ O& A7 T" M0 @ new FArgumentsImpl (this, sel)));
/ }. V+ k# Y+ z6 A) n } catch (Exception e) {
' F# L' n( {& K0 L5 q. J' @- M e.printStackTrace (System.err); a7 V9 [3 V& L+ T s
}
9 Q) y* O5 S; _, d# ]& J+ t+ @2 {0 d B" X W% J' l* O! y0 `
syncUpdateOrder ();
2 |2 g. V7 s( A. G: A
# l8 n3 f9 [' P try {( v7 y3 `3 y0 _/ ]; u
modelActions.createActionTo$message
3 ]- z9 K# @5 P (heat, new Selector (heat.getClass (), "updateLattice", false));% q" s( K3 n; [/ @; i( v7 I8 z# \
} catch (Exception e) {' w" o1 w7 S0 I8 N
System.err.println("Exception updateLattice: " + e.getMessage ());
/ c" T8 A9 D7 D& n/ M }
6 O' a7 `9 q& P4 N1 n 8 d, h5 O8 G' S% T
// Then we create a schedule that executes the, Y! U1 @/ o+ u/ k4 k1 U) k( X% {
// modelActions. modelActions is an ActionGroup, by itself it
& t: }+ I' U' D% U, B- J; w // has no notion of time. In order to have it executed in8 _+ a7 Z& V" Z4 a- U3 ?: g
// time, we create a Schedule that says to use the4 c! T2 R% W y4 i0 x* r; r7 b
// modelActions ActionGroup at particular times. This
! w- k4 f* w Y2 F2 |2 ^. u // schedule has a repeat interval of 1, it will loop every
9 k U% b' {7 _* z& y7 P, Z3 p // time step. The action is executed at time 0 relative to
( ]7 J$ P" x: Q7 j" s: r // the beginning of the loop.3 V/ ~1 Z* `' Y; o5 q7 M
# b& G% U" B! X* Q // This is a simple schedule, with only one action that is
# \! s5 Q, d( V // just repeated every time. See jmousetrap for more5 z1 y% d" l, k& [6 H9 N) T
// complicated schedules.
) f3 c4 w: [) M2 H/ K! i( t
' F+ J; B1 g# q. L( l6 h modelSchedule = new ScheduleImpl (getZone (), 1);# K3 p5 D* U, B6 J6 |; {$ x
modelSchedule.at$createAction (0, modelActions);
! ~$ K3 u8 U+ d) y) C
5 {1 P. \1 q+ ? return this; c5 b% }7 ^. u5 S
} |