HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ _1 n( W' F2 ^' E' {
" H1 j) I Z" D) b3 o5 O public Object buildActions () {% ]" ^& E+ i u' D
super.buildActions();
* H4 S9 a8 O0 M9 E, q( U
( @6 v4 }% V) T" K R6 X+ ?& N+ O // Create the list of simulation actions. We put these in
2 `2 K- A. |, R) P. @' {4 E // an action group, because we want these actions to be
; P# m0 |& ^; q; i // executed in a specific order, but these steps should8 N/ Y' K0 Z4 t
// take no (simulated) time. The M(foo) means "The message; q# v" F9 W' `& o1 g( G0 ]
// called <foo>". You can send a message To a particular
( e3 X3 y3 Q9 M1 b [ // object, or ForEach object in a collection., g# A1 n& v: L4 [' B; b' l
8 v8 |& c5 `3 L; O- @( U6 ^" K
// Note we update the heatspace in two phases: first run% b$ ]& l1 z- Z4 p2 q- n0 l
// diffusion, then run "updateWorld" to actually enact the& `5 ^# b# P, `) d$ O/ s3 \1 d
// changes the heatbugs have made. The ordering here is
6 ^0 u* }# l2 S* b6 v9 T% S# P // significant!5 K0 B& o D8 c4 @
) ]7 q9 J; d) C: [ // Note also, that with the additional
, N/ R; |* a" U: T6 N: s // `randomizeHeatbugUpdateOrder' Boolean flag we can6 N% v" H- E L# S% S' a
// randomize the order in which the bugs actually run9 U _) w+ R2 |) s
// their step rule. This has the effect of removing any
+ r+ w+ h J/ T // systematic bias in the iteration throught the heatbug- L) v! P3 i/ }# s5 Z8 `
// list from timestep to timestep
) p4 B9 }" D. A$ b7 {+ p
[* {7 t! X( A. d% N3 ` // By default, all `createActionForEach' modelActions have
9 }6 D7 Z* J7 X' n, n) c) ] // a default order of `Sequential', which means that the
; S* v2 U8 @ d9 V // order of iteration through the `heatbugList' will be
1 p6 Z1 }' S* R7 A* t // identical (assuming the list order is not changed
/ @+ @( o$ S/ w# O9 L // indirectly by some other process).
) c* g6 _6 W0 ?. f. W
' Y9 I- {- D, e6 g$ C modelActions = new ActionGroupImpl (getZone ());9 b' l, _/ o2 |- a
# d, V U. H# H( T8 W" K! ~
try {, e l# y+ J: B8 j* e
modelActions.createActionTo$message
) T& F$ m: N; z/ g( a" R (heat, new Selector (heat.getClass (), "stepRule", false));
/ \1 M, e1 P6 ?# O9 i# Q } catch (Exception e) {
, k- |. D. }/ j" ] System.err.println ("Exception stepRule: " + e.getMessage ());
9 f; d* ~. n0 U9 B# w& V; T }" J1 v! l0 t) `! Z
5 |4 m8 } d: @ try {
8 F. X' P& M6 Z1 @7 ^ Heatbug proto = (Heatbug) heatbugList.get (0);( E: L! D3 ^* ]- R( F
Selector sel = ) W% L& _% K6 F1 [0 p
new Selector (proto.getClass (), "heatbugStep", false);
" f* m" u9 \& \ actionForEach =
7 S- T! P, @5 E* j+ o! }* j! d* R modelActions.createFActionForEachHomogeneous$call
# e: v' l3 Z1 D/ X, ^' u+ O2 @ (heatbugList,
4 y( Y/ b# K5 f new FCallImpl (this, proto, sel,
. l0 A& Q% r6 u# e) P new FArgumentsImpl (this, sel)));
. B9 z6 Z9 i/ @* P$ P P' s } catch (Exception e) {
' u5 Z. o% T/ G/ | e.printStackTrace (System.err);
, V& O1 W9 j1 R9 r2 R' c h( P }4 k! c* z; I& {! Q
9 c3 j3 G' ]# d# q/ }+ ~
syncUpdateOrder ();
! {9 s4 d0 K# \" R& V! E) N- K# q& H6 k+ w' ?" B) E
try {
1 C1 q( ^3 t: S' B modelActions.createActionTo$message " Q7 y$ D3 v' j
(heat, new Selector (heat.getClass (), "updateLattice", false));3 _ ]; w' ]& _ U, O4 g
} catch (Exception e) {1 k8 C9 q l. Z7 Y) X8 U
System.err.println("Exception updateLattice: " + e.getMessage ());
$ e( ?2 ~, K$ W2 @. B) }- B) m }; e- x/ x& r' D+ \& E1 \5 a6 f
0 w1 F( `; q& X0 H$ ^/ Z% D( g# F
// Then we create a schedule that executes the. g" O9 c+ Y& _4 e9 |: `
// modelActions. modelActions is an ActionGroup, by itself it
/ |8 U6 F5 t2 N, Y' M0 N // has no notion of time. In order to have it executed in
! S( D+ z8 o: I3 ^! R/ G$ Y% @' l // time, we create a Schedule that says to use the
+ ^9 g1 k9 X+ }. x // modelActions ActionGroup at particular times. This
, H' p! o! \9 f: w9 A // schedule has a repeat interval of 1, it will loop every1 r9 ]9 n/ C b- I6 t7 a' J1 {
// time step. The action is executed at time 0 relative to
. z- W+ G. @* I1 {; i // the beginning of the loop.
! m2 u& o( M, d1 O3 \8 [0 f$ _0 u8 H) Y5 R2 V( i- _
// This is a simple schedule, with only one action that is* c) q) y3 K d: m, c8 Y- Y; ?* N7 ?. l
// just repeated every time. See jmousetrap for more
) A7 c# h. Z u3 Z- R: l // complicated schedules.1 @, p) G6 h, ], }: d6 V! m" {+ M( p: c, O
- c! A8 `& G6 | `+ s9 g8 R modelSchedule = new ScheduleImpl (getZone (), 1);& d; a. x9 b6 s; G$ N# b" V0 J# w
modelSchedule.at$createAction (0, modelActions);
4 ^/ ^7 B" `$ C- Z; S2 R
. B8 k+ u$ T% r0 Z; T% D. x0 ~, N. l, Z; B return this;
! l- Y; u3 c9 C; ]$ f: g } |