HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 o3 f6 G2 b# {: a! e2 k* Z% s; U0 h5 _0 O- T
public Object buildActions () {! U* |. M3 i6 ^6 }- b& c
super.buildActions();
9 A: N2 J) D7 }( a& I! D: P 8 [ U$ q; m; o( o8 K
// Create the list of simulation actions. We put these in# x3 Q, k) k. |. G9 X/ ^8 \- w
// an action group, because we want these actions to be
: @' B8 H2 ~+ ^! s9 V8 f: Z // executed in a specific order, but these steps should" k5 @) C8 r, Q5 a2 q
// take no (simulated) time. The M(foo) means "The message
! m5 `4 _$ {- M' u+ n0 f // called <foo>". You can send a message To a particular: J W# g$ n# d; d' m
// object, or ForEach object in a collection.
6 |' \: a& B1 m$ v, ]
" s# ~) I- N0 j& s% ^8 R8 J. ?2 {% Q // Note we update the heatspace in two phases: first run
; N' B6 ?) f' p3 f // diffusion, then run "updateWorld" to actually enact the2 p5 M, Z$ r. b# ?; [/ \
// changes the heatbugs have made. The ordering here is$ V2 F. u, S4 ~) X) d B7 i" ~( D, ]
// significant!
) [% p% i$ b/ V* N8 R" J 5 n$ L! w6 w1 a. A1 g# p6 z" \
// Note also, that with the additional
6 t# I9 v: B/ y8 D: a // `randomizeHeatbugUpdateOrder' Boolean flag we can
. R! C6 ~# w3 F# x // randomize the order in which the bugs actually run
/ L5 f- t% p I, S // their step rule. This has the effect of removing any
. z1 Y! B* _; E$ B8 l% A _' \ // systematic bias in the iteration throught the heatbug# V/ w! R4 ]" b+ c
// list from timestep to timestep7 U4 _) f/ H, r
/ c7 N" R- f* v+ k) G- m // By default, all `createActionForEach' modelActions have* n2 D' Y; q) }7 F' M3 t' i9 z+ t
// a default order of `Sequential', which means that the% q+ w/ O1 [ O; l0 E
// order of iteration through the `heatbugList' will be3 F* S$ y, T7 m: F {9 Q# h
// identical (assuming the list order is not changed
% a& v3 L0 L! `$ @& a/ V: l // indirectly by some other process).5 T7 w& w& Y/ a! R/ k
* l3 B- T1 Y1 L. c: S% d$ C/ f modelActions = new ActionGroupImpl (getZone ());
; P, E% Y' @8 O5 @. A% u0 H- q: f: Q8 e6 C5 ^0 n* m
try {0 y, o8 J. `7 I- m
modelActions.createActionTo$message: Y1 J9 M! M! q
(heat, new Selector (heat.getClass (), "stepRule", false));0 @0 h6 s2 t' ]: i' H+ o; N
} catch (Exception e) {$ M& X6 B$ t; _8 B( x9 d
System.err.println ("Exception stepRule: " + e.getMessage ());
; G' a. S1 i, T' @% C' ^. a" D. b }! ]7 m6 m2 V% Z/ q F
& \ g B: W' i' B try {9 [) g3 Z% ^) Y4 i1 g/ l" ?, Y
Heatbug proto = (Heatbug) heatbugList.get (0);
. x/ v2 {1 Z+ s2 a/ i Selector sel =
( I4 {+ W* W5 h# ?0 j( m/ O5 c/ o; E new Selector (proto.getClass (), "heatbugStep", false);% O |4 F2 Y+ D' l' C
actionForEach =5 f/ Y |4 J+ ^
modelActions.createFActionForEachHomogeneous$call
* s* V: M5 m `! X5 \, W (heatbugList,
' Z6 x3 r* |+ D- Q new FCallImpl (this, proto, sel,
6 C, P+ M0 y3 d/ ?, Z5 O new FArgumentsImpl (this, sel)));
3 i/ ~8 r" v' w; Q1 f } catch (Exception e) {, n0 I" t, C5 N3 k: c2 \
e.printStackTrace (System.err);/ y! c# O G+ a2 |
}
) V8 J: d1 E8 f0 z! k$ I1 _/ |3 J 9 t' b2 d" p, k6 ?3 C) f
syncUpdateOrder (); h) |* |4 S; j, a4 G4 f J
8 C( o, ^8 T/ j! \( A o1 y6 @3 ^ try {
, p! j% P; }$ f: \# l. i2 m, ?' { modelActions.createActionTo$message
# Q1 ?) r+ ~4 w6 }5 [) ]7 |, Z1 R. Y (heat, new Selector (heat.getClass (), "updateLattice", false));7 J0 t) A: J. m9 P+ h
} catch (Exception e) {: z9 Y( _" |! n' W" t
System.err.println("Exception updateLattice: " + e.getMessage ());
' Q; i! Q* x) I: c }* m% |5 {. X; b% L$ a. O% g
. f( C" m' C+ [* T( G // Then we create a schedule that executes the. ^; b7 j4 Z- _ S3 I/ {0 D
// modelActions. modelActions is an ActionGroup, by itself it8 p/ \5 A& J; P9 a
// has no notion of time. In order to have it executed in5 B4 [) M M" m
// time, we create a Schedule that says to use the
% r6 F. }$ \& e, `6 D // modelActions ActionGroup at particular times. This6 T! b' k& {! p3 r9 ]$ Z# Y
// schedule has a repeat interval of 1, it will loop every
* a5 ~) ^$ o( `& |! a& P // time step. The action is executed at time 0 relative to
4 I7 ?" p2 U- ]$ [ // the beginning of the loop.
; C$ J+ n' w: n
- n* L* c. _" R$ i+ p% D // This is a simple schedule, with only one action that is
! H8 T% b3 |' e: o1 w9 R1 R // just repeated every time. See jmousetrap for more
1 |6 O6 P( M) K' N" h // complicated schedules.! {/ @. C/ p- L8 o' v3 T. E
3 U" w+ @/ B0 k4 G4 p9 x8 v) ~
modelSchedule = new ScheduleImpl (getZone (), 1); ]! |- `' Y* A% j8 ^' j0 ~! G
modelSchedule.at$createAction (0, modelActions);
* Y' p# F! q! s& f, P9 z/ ~" V. m
4 v: O7 q& ?% O7 [) i2 K7 { return this;
' H7 w2 c0 j$ K$ W0 H, H: u } |