HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. @2 t7 i }: b+ F" [" T5 v0 J' X' g5 x) B
public Object buildActions () {
4 N/ {! v$ g& A; V* M4 Z2 ^. A* ] super.buildActions();# W4 q, O- k- X- {1 I
9 D/ E. s# G5 a! ?4 q
// Create the list of simulation actions. We put these in& p' X" a% u% `! V9 \
// an action group, because we want these actions to be
- v8 S( ?. c x7 O0 `8 g // executed in a specific order, but these steps should( P- u& f8 g+ u& [
// take no (simulated) time. The M(foo) means "The message
/ v( M& u, R- r. W4 q. U // called <foo>". You can send a message To a particular
: y/ k y" l% d" N& V // object, or ForEach object in a collection.$ C/ _0 T* T- Q1 d: G1 S
6 o% t! E7 h- K0 b! d& \* o3 s // Note we update the heatspace in two phases: first run
7 b6 E8 a& K8 \/ O // diffusion, then run "updateWorld" to actually enact the: b& i! n1 ?# I& n7 ]
// changes the heatbugs have made. The ordering here is
, R4 t' q$ S7 C3 u0 F U9 G // significant!( g# K3 I& R w
3 `) p9 `5 A5 m* D // Note also, that with the additional
# M' D2 B+ K8 t // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ L# A+ D ^; B( r' t4 z // randomize the order in which the bugs actually run7 K) |* _; h8 J" Y; j
// their step rule. This has the effect of removing any
/ N9 p2 B$ b7 A$ | // systematic bias in the iteration throught the heatbug+ c2 X* U% n; m0 K: X+ ]$ r; w% M
// list from timestep to timestep0 }" x- |. W2 h' R I! b6 n5 U
: D0 A9 [" B0 ~- i: {* i
// By default, all `createActionForEach' modelActions have' O+ s# `. f5 i; v! L3 t' G- i
// a default order of `Sequential', which means that the8 D/ k9 w" U8 w! o1 q) q
// order of iteration through the `heatbugList' will be9 Q; R$ R; J4 e" Q3 Q4 k2 X8 e
// identical (assuming the list order is not changed9 }/ Q! h" }, D& z/ c, B) z- L
// indirectly by some other process).: j0 ^; g7 C' ^* C* G. B
% I. K1 f( N s# H* j( H8 m0 O! o
modelActions = new ActionGroupImpl (getZone ());& N5 t( y, l/ a9 R4 _
" x: U5 r* a/ l" Z5 M
try {& ^* `- X! V) z2 Z
modelActions.createActionTo$message
! s$ {! x) x) Q (heat, new Selector (heat.getClass (), "stepRule", false));
^& v% {5 A! W7 G } catch (Exception e) {6 H# n* Q3 h p; l, e4 C
System.err.println ("Exception stepRule: " + e.getMessage ());+ w; h4 x/ `7 Z4 O N
}5 {) J' Y6 j' a& |: N, {% C" p& D4 y
# O. {+ S3 ]7 r; Q7 v
try {8 `; M+ B5 e |7 ~" ^; ?
Heatbug proto = (Heatbug) heatbugList.get (0);
- j) y2 s1 `- x3 T0 j; } Selector sel = ) A7 ^3 Y$ {& J" k
new Selector (proto.getClass (), "heatbugStep", false);
7 e8 [% G. n( B! D& h6 ~7 V actionForEach =
, \2 G9 q% R* R6 A; R/ y4 I modelActions.createFActionForEachHomogeneous$call
" t' O+ d/ @, s- H# P" A0 J3 n (heatbugList,
' `$ t7 Q6 x6 I1 [+ _ new FCallImpl (this, proto, sel,
6 f' i3 q( d: W4 I) Q& o; e new FArgumentsImpl (this, sel)));. _( F, r8 Z# A/ x* @
} catch (Exception e) {
1 q, s( z" t6 @* \% M. _& U e.printStackTrace (System.err);' t* U2 y0 ~* R4 ^7 m
}
# d: E( `' y+ V; Z 4 j8 N/ l8 L0 Z4 p% c" U5 v! D( t, V
syncUpdateOrder ();4 m! \, H9 z1 Z& s2 g& U$ Q
( I7 N. p' c! S }7 I
try {
# o! ?9 S" n: X7 v; z modelActions.createActionTo$message
& G6 k$ K q9 P' e (heat, new Selector (heat.getClass (), "updateLattice", false));7 P4 G/ R& D4 R9 J% a$ |! X
} catch (Exception e) {
5 _) j1 C, F+ O8 p$ X System.err.println("Exception updateLattice: " + e.getMessage ());
$ a+ U* |2 w) V }/ {9 k4 q& ?$ ?5 T6 B9 p
: j3 F7 p; O! d: t9 x3 e7 Q
// Then we create a schedule that executes the
+ R( C+ `9 F0 ^4 h: U6 p6 E // modelActions. modelActions is an ActionGroup, by itself it
) I5 g' b4 N- R7 x // has no notion of time. In order to have it executed in
2 B/ b/ z1 k/ H/ s* k // time, we create a Schedule that says to use the
6 `9 e( A, H! O" | // modelActions ActionGroup at particular times. This
# J1 X3 p& C* a, X6 K // schedule has a repeat interval of 1, it will loop every5 i/ u( X( ?, S4 }
// time step. The action is executed at time 0 relative to* n1 m% @) i# z' _
// the beginning of the loop.' {9 w. E( d2 i3 L& z9 d
8 R& Q4 K* o; w/ B // This is a simple schedule, with only one action that is
c* R+ C. k! z // just repeated every time. See jmousetrap for more; n- b; O5 q; n
// complicated schedules.
. O7 \4 [& [# Q, s
D# l; ^6 ?: H* j; } modelSchedule = new ScheduleImpl (getZone (), 1);' n/ P, V, M( r. U9 H# D
modelSchedule.at$createAction (0, modelActions);
" Y0 _* p Z! j' G
3 o; U; V! n T7 s3 h. m, w return this;
4 t8 i! t0 f+ \+ p- i. n } |