HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ n8 }% E5 {, P7 R) G% M1 C6 ^- H! y i) D6 ?, W- i
public Object buildActions () {" p$ v A, Q" e" @% a a9 o
super.buildActions();6 g" Y) P3 r9 [" k c- w4 C
2 H' w# \& z# ]3 }$ _9 F& Y
// Create the list of simulation actions. We put these in( T0 ^" g( q+ G
// an action group, because we want these actions to be4 C" ]! a0 l; M$ r5 G0 t
// executed in a specific order, but these steps should8 Y" O# W- s& Z/ c
// take no (simulated) time. The M(foo) means "The message
( v5 B; @ g/ L( r8 n8 ]8 `$ n // called <foo>". You can send a message To a particular
( ^& k. a+ T5 {6 z e- n$ e // object, or ForEach object in a collection.
% T4 B A; S. R" `/ n" O
: I: [0 c- Y' C // Note we update the heatspace in two phases: first run
$ v) D2 K8 [0 z7 s/ Q // diffusion, then run "updateWorld" to actually enact the
3 q3 v2 j5 A' I. M# M+ [* g& Z // changes the heatbugs have made. The ordering here is$ G# k. c' ]# {5 M1 P
// significant!& F$ u6 ^1 X( q5 h8 m
4 ?" h9 v4 w: u2 l5 i+ ? p
// Note also, that with the additional
6 _9 p$ Z# {% q! ^( ?- Q# u" A // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 e& O$ Y h0 e, |; [ // randomize the order in which the bugs actually run
: [+ T' [2 p! w) C9 q- v, ? // their step rule. This has the effect of removing any$ Z3 l! P! [" @/ r" L7 \
// systematic bias in the iteration throught the heatbug. q3 z4 c* `3 g' F# B
// list from timestep to timestep
8 s) T9 n. X: F! B! E9 ?. `, T
! s# }% T0 l0 c) T# m) @( Q // By default, all `createActionForEach' modelActions have
. a- k0 D/ ~0 Y0 Q // a default order of `Sequential', which means that the
* t) C+ z* ]" A E! d // order of iteration through the `heatbugList' will be
& E" L7 p' i5 P* m( R1 { // identical (assuming the list order is not changed2 @2 R; Z# D& {; f9 G' v7 `5 H
// indirectly by some other process).. A5 H* d0 ]3 q
0 H+ j0 e& P8 I) a- q1 c* p" e. a1 i modelActions = new ActionGroupImpl (getZone ());
4 p: {% o8 M2 p; g) X. t$ [% x' H* j0 ]4 S0 s# ?2 k) h
try {1 w; ~5 r% |1 W& y6 D- C
modelActions.createActionTo$message
$ v7 Z$ y3 {4 I (heat, new Selector (heat.getClass (), "stepRule", false));& R# i; \( H7 W5 r( L9 ~
} catch (Exception e) {
, k4 s- s7 A, h- q: Q3 `* g System.err.println ("Exception stepRule: " + e.getMessage ());
r3 v/ M$ D& m! W }
4 [1 S0 j: N9 f, m, X5 W6 J& _* x3 Y1 Z4 f" I, ?
try {4 P7 e. M0 t8 j! f8 O6 F ~
Heatbug proto = (Heatbug) heatbugList.get (0);
2 c9 {8 S0 b. s9 l* L7 ~3 K Selector sel =
A& y5 ~6 r" @2 _; a new Selector (proto.getClass (), "heatbugStep", false);, G/ [; x0 e. b" _5 z1 L! V
actionForEach =& R2 X1 b% [" S% l$ w( T
modelActions.createFActionForEachHomogeneous$call
, R5 s; d/ g( a+ R* L (heatbugList,, V! p1 V, I8 O
new FCallImpl (this, proto, sel,
7 B8 E4 V& H/ }- ^ new FArgumentsImpl (this, sel)));* `+ z$ h' J- M Q# r7 u0 i
} catch (Exception e) {* i# k0 Z1 k4 J% ^
e.printStackTrace (System.err);6 f* U- a+ M% s4 j) K9 v) L
}
& m. V* _, d7 T5 C+ j( ^ ( `. p5 ^: s/ Z# e6 y; [& `
syncUpdateOrder ();7 }: B( S4 s! V8 z1 d+ x
1 |: m4 t7 M4 X" R% i try {
: k5 ~" g' [8 s) u# y s$ W modelActions.createActionTo$message . C1 R, @; O- n% k+ ~+ U
(heat, new Selector (heat.getClass (), "updateLattice", false));
' s" X; ^1 d' M } catch (Exception e) {
9 H( p- J/ w( @+ H* N System.err.println("Exception updateLattice: " + e.getMessage ());( Y! W1 S: P9 `( t& J/ H, [3 J
}
- q( K: _! E' h- _$ H& @5 ` , x/ T' g/ |2 k& ~
// Then we create a schedule that executes the
3 J6 s+ O% i. ?) d" h9 G8 f // modelActions. modelActions is an ActionGroup, by itself it
" H' D& l$ u7 |- i1 e // has no notion of time. In order to have it executed in
0 p2 {# j) d Q" O( q1 j4 ]0 @% v // time, we create a Schedule that says to use the5 A w- K1 b+ b7 |
// modelActions ActionGroup at particular times. This* q/ q$ ~% k" a7 ?% H! ?
// schedule has a repeat interval of 1, it will loop every
; P. }: ^ y5 u* N! d: w // time step. The action is executed at time 0 relative to% @& P4 T! I6 e, U2 M4 r6 q
// the beginning of the loop.+ f V9 l6 a) Y5 p4 D
) j+ E7 a; `8 O+ i! T
// This is a simple schedule, with only one action that is4 a2 S1 d+ y2 I7 W7 B" ^
// just repeated every time. See jmousetrap for more$ B! r3 j' u+ ]7 V7 j6 s, L( a
// complicated schedules.
0 H5 C* T& _, Q& \" F# b Z4 l+ u5 v5 Z: a4 m) K$ D3 A5 ~: M* `
modelSchedule = new ScheduleImpl (getZone (), 1);
/ V, v& y7 J0 Y3 Y8 f) I* X modelSchedule.at$createAction (0, modelActions); f. f- U6 ^! E
2 l; Z _% d8 G2 s3 ] return this;; \$ E, w* Y2 H
} |