HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" J' w% m0 ~- F0 s! ^2 L# J
& Q$ Y3 c: i% d6 O6 K public Object buildActions () {: f8 j" B" f4 N4 E% J# d* V
super.buildActions();7 j- G6 n% I8 ^% Z+ f
6 E# T6 F B/ O3 A- Q8 b' Z
// Create the list of simulation actions. We put these in
0 q! M3 [4 ?7 m. R+ V) m // an action group, because we want these actions to be% k; i3 R! k! K$ Z4 Q% p
// executed in a specific order, but these steps should: x' w3 r1 |$ O7 e
// take no (simulated) time. The M(foo) means "The message' V8 g; M$ p0 R& P
// called <foo>". You can send a message To a particular, M. ^$ n) V' o! _. R
// object, or ForEach object in a collection.: x- n! _. V, T; n
/ W* @9 U* |# D/ Y+ y9 j
// Note we update the heatspace in two phases: first run
8 u8 @* {. |0 F // diffusion, then run "updateWorld" to actually enact the c4 y# @: x7 X( u8 J) Z
// changes the heatbugs have made. The ordering here is' u0 I/ B. K5 F6 P+ B4 A+ d
// significant!% y: ] a" F+ g) L! z+ u
, G: W; X# `) B. h0 ~! j* n
// Note also, that with the additional
: w# O' b1 Q% l, y" I // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 P! o* }1 R1 N+ }5 w // randomize the order in which the bugs actually run" q; |' Z$ s" D- T! T
// their step rule. This has the effect of removing any0 A$ m Q- b& s n& h
// systematic bias in the iteration throught the heatbug
9 Q0 f2 z6 n; E/ U // list from timestep to timestep8 N/ h" h; S7 h1 V' J, r! f# S
+ |* y( n5 H0 |6 x) b4 H8 g8 B
// By default, all `createActionForEach' modelActions have8 r" K7 l) w, h: U5 z& f5 f6 |/ J
// a default order of `Sequential', which means that the
% ^ j# `( N3 k4 S9 J // order of iteration through the `heatbugList' will be
/ ]; u2 R0 r" O; W& X# Z6 Z // identical (assuming the list order is not changed! n, j& n& X. y9 W' e& E% g. i- K
// indirectly by some other process).
- r) H7 a& j2 c k( E3 r* ?% f+ _
7 j8 V( q8 o2 Y* a8 _( O3 b modelActions = new ActionGroupImpl (getZone ());
- q$ E2 y" ?4 k2 a$ A' { b7 v# L4 W' b2 s
try {
) Y' }8 @7 K. m7 w modelActions.createActionTo$message
7 t4 ^( O- J# \! V! Q# e* r s (heat, new Selector (heat.getClass (), "stepRule", false));
$ v% L6 ]. j$ W. q1 f } catch (Exception e) {
" ?' ` G1 B9 M System.err.println ("Exception stepRule: " + e.getMessage ());: W4 D1 ?# Z, _" ^. G9 i" w+ e
} c: w) Q, `* ^+ _! S
! B( h1 m( g" G# e0 c! s. V' Q& s" @
try {7 i9 Q4 G0 n% M, ]
Heatbug proto = (Heatbug) heatbugList.get (0);
: ^+ Y! ~, g1 v( _/ R Selector sel =
; ]- e6 Q: ]9 D" ]" w. z new Selector (proto.getClass (), "heatbugStep", false); g& R+ w) p2 h
actionForEach =7 T9 \. w7 {8 e, T
modelActions.createFActionForEachHomogeneous$call
! Q0 o. b1 j+ [' {) a: d+ s W (heatbugList,
9 @/ M- m; _8 e5 u new FCallImpl (this, proto, sel,! ~% V% F6 c0 |, [+ s6 i
new FArgumentsImpl (this, sel)));5 O7 P. m6 N/ B; F2 `. X8 {; |1 E
} catch (Exception e) {
8 X9 `" R, L |% R+ K" Y e.printStackTrace (System.err);
" X& B; t! {9 g1 G }2 E2 q, I {, i0 x" n" r4 V' z- U
; |! h+ g% {0 Z
syncUpdateOrder ();: v3 R, o& |$ I% W$ S# t
! F8 r: `4 E2 w6 k6 `3 o9 U7 \ try {
" z' Z3 _! l4 m3 p modelActions.createActionTo$message
; h8 a; \) J7 O# m R4 t (heat, new Selector (heat.getClass (), "updateLattice", false));
. @& a+ E& ~6 {) w; @5 s } catch (Exception e) {
5 t( |1 r; T M$ [* g& S. w) A7 @ System.err.println("Exception updateLattice: " + e.getMessage ());
0 N9 D O* Z! F: o, _ }
, C) _4 k0 a' \# t O 2 {6 j' ?0 T' Q( b- z2 z
// Then we create a schedule that executes the
! c4 m% B* r' P0 \) B; t // modelActions. modelActions is an ActionGroup, by itself it" s7 n% t% k% ^! b& B2 h
// has no notion of time. In order to have it executed in" P( _6 i1 @( B, ?; L
// time, we create a Schedule that says to use the, O. z" X* Q2 m0 w, D+ r
// modelActions ActionGroup at particular times. This3 c! c* L) t2 R' j' d
// schedule has a repeat interval of 1, it will loop every
V" I1 V1 u" q3 n4 s { // time step. The action is executed at time 0 relative to
$ x8 h' [$ W) k- a // the beginning of the loop.
5 E9 G3 M2 F7 u8 \5 ?. m1 Q$ w8 F @: [% i6 J% X
// This is a simple schedule, with only one action that is9 d0 K# u. ]+ A
// just repeated every time. See jmousetrap for more
) X8 V$ C5 X# L4 M( H // complicated schedules.% r7 B& o) J3 R" _/ l! {; m
8 s6 z; b' o- o; [. e- l modelSchedule = new ScheduleImpl (getZone (), 1);
( i3 j6 [; n5 E6 @1 E modelSchedule.at$createAction (0, modelActions);
, V9 t/ q. s* x! j 0 G' t. Y! A y" E0 ^8 d9 @, U
return this;
3 r% a& {* \5 M x7 t% j } |