HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# `. D# k; i2 J1 A% w# `" T+ Y$ a7 Z3 Q( b' w7 P
public Object buildActions () {; G2 Z; b5 l7 V8 D1 Y) ?8 z) X
super.buildActions();8 Q. h( q/ e5 \6 E3 L8 f5 D
7 T0 Y; K0 {" Y, g3 J
// Create the list of simulation actions. We put these in% b1 K0 u6 I6 K9 L1 X% [4 D
// an action group, because we want these actions to be
( V. G( f( z* z2 C2 r+ ? h: V // executed in a specific order, but these steps should
3 ?1 X7 r: I' q! k // take no (simulated) time. The M(foo) means "The message
6 g/ J! U- s8 ~6 k# w8 R' |/ M/ C // called <foo>". You can send a message To a particular
% p8 A# D: b7 Y) Q" O( | // object, or ForEach object in a collection./ j& N8 a6 @$ Y- F
6 x: M6 R) g- @ // Note we update the heatspace in two phases: first run
: c% ^2 m% Z) g" M7 n( @$ O) Q // diffusion, then run "updateWorld" to actually enact the
7 |* {: v1 ]1 c+ Z$ V; Z, ^" F- { // changes the heatbugs have made. The ordering here is) ^9 f# p) E8 a1 s; ]6 _" s
// significant!/ c! _. V, J; ^, W! `; D
4 } F1 e S) H, Y) F // Note also, that with the additional
. ]7 N a) z) @6 T0 I0 { // `randomizeHeatbugUpdateOrder' Boolean flag we can7 b0 e+ p0 i: i3 O" B, u0 C( V
// randomize the order in which the bugs actually run& s2 k5 {! f3 c5 E. _
// their step rule. This has the effect of removing any% K* U2 K8 I3 h9 A* C
// systematic bias in the iteration throught the heatbug
, F/ B$ E& P6 q+ `& Z! a, L a2 K5 g // list from timestep to timestep8 S+ p* ^' Y- _* K! d; b$ Q
# e7 b$ [; z. q$ \# U g' t
// By default, all `createActionForEach' modelActions have
% t, W0 ~9 m7 I) V' } // a default order of `Sequential', which means that the u2 K* e$ Q. l1 W/ V; g% Q9 t# H
// order of iteration through the `heatbugList' will be
$ S. }0 F% J: f" V5 V4 @5 i // identical (assuming the list order is not changed
0 u5 r! P/ R( g // indirectly by some other process).
3 U' Y' a7 Y5 z
# i( J: m# c a/ H modelActions = new ActionGroupImpl (getZone ());; q1 h9 g; l8 H$ Y1 j3 r7 d G0 Y; _' D
& g) ?% z7 I: {; Q; ~) D try {$ e$ r2 n4 e6 d7 n2 D; h" y2 N$ j" m
modelActions.createActionTo$message
) _: ~. h* O m9 b (heat, new Selector (heat.getClass (), "stepRule", false));5 h- s) T, ^# {* d) N* t0 H( w
} catch (Exception e) {
! L) Z2 e. ]' @0 \ System.err.println ("Exception stepRule: " + e.getMessage ());
; I5 [7 k: Q4 M! s }
: @* H- d" \3 F
& }8 u7 k- y- M# b) O) p try {' l1 Y' o9 x6 n
Heatbug proto = (Heatbug) heatbugList.get (0);9 H, C) M8 u0 k$ J2 a7 j% z B
Selector sel =
# ?# k( m- C* D+ i( y new Selector (proto.getClass (), "heatbugStep", false);2 o' s& ~6 K8 P) o& A; O
actionForEach =2 x1 A$ s' n$ v: [
modelActions.createFActionForEachHomogeneous$call
1 h8 v1 R/ E( U) K$ C2 A (heatbugList,
( v1 e t2 r' |1 i. m new FCallImpl (this, proto, sel,! M* l7 V8 K' W0 k) N
new FArgumentsImpl (this, sel)));3 K2 S3 \8 k* G' V, `
} catch (Exception e) {5 U. X# [) [: a+ ^- l
e.printStackTrace (System.err);
: [ S; _$ |8 I }
9 _/ p# O8 i( [% G5 ~7 i" e- ^ ( U# f0 h. l# q% m8 v" n
syncUpdateOrder ();
' a6 A# L, m3 i5 T0 _+ N0 { r' f5 N2 O w1 a9 _
try {' _/ U+ K: h' \8 u
modelActions.createActionTo$message
2 H7 w7 R0 A5 A/ F5 [1 [ (heat, new Selector (heat.getClass (), "updateLattice", false));, |% _* ^* ?8 v* S. ^8 N
} catch (Exception e) {
) j) m, l+ Y, V/ P# a. e# ]9 _ System.err.println("Exception updateLattice: " + e.getMessage ());
! S# L9 A- R8 |# r. ]* r }1 l: W* U. t" ~# u* A4 P. o0 v
, Z1 ?8 c0 @6 [, L3 S9 F // Then we create a schedule that executes the
- {0 q8 o7 A6 ^9 [ // modelActions. modelActions is an ActionGroup, by itself it+ Y8 e5 _# F8 W
// has no notion of time. In order to have it executed in
/ g3 T3 w8 b" u0 o* v7 L // time, we create a Schedule that says to use the5 ^, X; [- Q6 w5 Q
// modelActions ActionGroup at particular times. This
2 ?. I9 P" v& b. R // schedule has a repeat interval of 1, it will loop every
2 P; ^% R: g' ~2 H7 f7 ?% q8 Q* a // time step. The action is executed at time 0 relative to
6 Y1 s8 g: {+ R // the beginning of the loop.
5 U1 b2 l7 v$ ^/ M* _7 T% @! N* C7 o5 M( O3 U' r& }
// This is a simple schedule, with only one action that is
; f% @" s* A* m2 m+ g1 S // just repeated every time. See jmousetrap for more
9 B# F+ _6 i3 W1 X9 A8 I // complicated schedules.( I0 P- Q, W5 G: S# O
! B) j) Y- ~' i1 f/ ~/ q modelSchedule = new ScheduleImpl (getZone (), 1);% u3 c4 L) ~9 P# Y ?6 |8 J
modelSchedule.at$createAction (0, modelActions);3 V8 Y. E- y( ~0 l4 R
9 y8 c E6 J6 j. F9 Q5 J return this;' \7 B, g C$ s4 t. P( Y8 n6 N* M0 T
} |