HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) x+ o& W; v; J3 R
) N& _8 r- J% v" Z8 @
public Object buildActions () {) G) w' O) [$ n% `& e* W( W k# ?
super.buildActions(); r/ y3 Z9 c2 L- ]
! L3 V$ c9 [- G4 e4 c: d3 { // Create the list of simulation actions. We put these in
( p* W% }9 V+ m+ L4 W // an action group, because we want these actions to be& E) X$ L% I4 H2 }7 g: \& T. |
// executed in a specific order, but these steps should
0 ]% `$ T }! o/ }% [4 d% z // take no (simulated) time. The M(foo) means "The message
7 }. F; y7 h+ k4 ^ // called <foo>". You can send a message To a particular
; K6 c1 C9 K. E // object, or ForEach object in a collection./ O, F6 W0 S6 P% L1 W0 E
) e( L. t2 G% p- G" E. j, R5 D // Note we update the heatspace in two phases: first run% j$ p8 b; ?4 I/ x! k3 D
// diffusion, then run "updateWorld" to actually enact the! [* U5 G7 O" n5 w' p! c
// changes the heatbugs have made. The ordering here is
8 b8 u' D) Q% T, e // significant!- @% d0 ]1 B0 o# M ]
: y; m/ k% C$ h6 ` // Note also, that with the additional4 W/ _* M8 c, S6 M6 S# q; r$ Y) t* v
// `randomizeHeatbugUpdateOrder' Boolean flag we can% I+ G; K6 a2 \
// randomize the order in which the bugs actually run
* J/ V" R$ x _$ E5 P // their step rule. This has the effect of removing any* L) |8 C7 A- d" o" ?% I5 i
// systematic bias in the iteration throught the heatbug# I- |2 W2 X4 I. i! P
// list from timestep to timestep
1 S- Z6 X P2 c' u( w5 n * c- j6 [# X/ `8 E2 v+ K
// By default, all `createActionForEach' modelActions have' Q1 T# a0 X( ^ S2 j$ a
// a default order of `Sequential', which means that the
& u, C# W- \& R' j // order of iteration through the `heatbugList' will be$ @1 Q& i- C6 A& q9 Q; X8 W
// identical (assuming the list order is not changed
; I2 r1 r2 A. \# x // indirectly by some other process).
^' l8 m. v/ X; u, B* Y2 \: B- y0 w
" F6 Q" u$ \+ V/ I# o modelActions = new ActionGroupImpl (getZone ());
3 w9 A% P! W4 }4 z% Q$ l
% l( S8 G: w/ O% O; ^8 |# m4 _+ @) D try {9 r" i7 u i8 X* W+ J
modelActions.createActionTo$message: w3 R& e1 O; [9 O
(heat, new Selector (heat.getClass (), "stepRule", false));* r X# a k+ K4 n, R& {# f
} catch (Exception e) {% Q+ D) Z! C# W' N# q
System.err.println ("Exception stepRule: " + e.getMessage ());
, p& x! \8 Y/ d1 A3 W }# v; @) b2 w- A: ?) k* E' I
" p" I" Y M K
try {
% H8 C+ n8 \0 t" f8 S) W6 ] Heatbug proto = (Heatbug) heatbugList.get (0);4 q/ j. g2 m/ v: j
Selector sel =
3 W+ q- P1 C& s) h W4 @" @3 V new Selector (proto.getClass (), "heatbugStep", false);
7 e8 b! z2 j2 j' |$ F) P actionForEach =6 Q$ }3 K% y2 ?
modelActions.createFActionForEachHomogeneous$call# @- l/ Y1 Z4 Q; `$ i
(heatbugList,
- z* }& u; l" O9 M1 A4 l new FCallImpl (this, proto, sel,5 y4 P) l5 O( j B) H
new FArgumentsImpl (this, sel)));' H1 e6 M( h; k$ b9 Z9 y
} catch (Exception e) {0 r2 Q7 u8 Y- ]7 r0 n5 B
e.printStackTrace (System.err);8 r6 ?1 {4 Z% y a+ T& c
}0 \, S: ]2 t# e% p8 g
6 `* |5 j; p1 d
syncUpdateOrder ();
5 f3 a# N0 s8 u, w0 j% F# I" B9 x6 c H* P8 o- F& _
try {3 ~9 g4 R* w/ e$ g
modelActions.createActionTo$message " ^! v7 ~" m3 v
(heat, new Selector (heat.getClass (), "updateLattice", false));5 R* E1 [5 W1 C8 M* g" a
} catch (Exception e) {
2 B# m. \6 O$ V6 B System.err.println("Exception updateLattice: " + e.getMessage ());
9 H& u3 n6 s w% s, _. H+ k% ? }, T# p% N- V8 {* I
& D9 ^- Y, o$ z2 A6 t0 {4 K
// Then we create a schedule that executes the
2 \: L4 d1 ?5 a6 s% ~& n# y2 ]8 P- g // modelActions. modelActions is an ActionGroup, by itself it3 J; K9 ^+ b* \, P6 G& m t
// has no notion of time. In order to have it executed in
- R0 k5 ^7 e' `1 f7 D9 a& g' w // time, we create a Schedule that says to use the; l( u9 O, J: Z" y( l3 a
// modelActions ActionGroup at particular times. This6 m I' n; s3 f1 F! l4 d. S7 p7 N
// schedule has a repeat interval of 1, it will loop every
' Z3 ]1 C9 c6 M( u // time step. The action is executed at time 0 relative to& a' T7 W7 e1 h' D" D
// the beginning of the loop.8 _, X) o- O. U8 b: m/ e
7 x: B0 A% o# J; H+ n6 B // This is a simple schedule, with only one action that is2 D, m* S+ E* x; @2 N( d- f9 ^( O
// just repeated every time. See jmousetrap for more
$ m k7 \! c S1 F l! e8 ~ // complicated schedules.) V# r! F+ z( T0 M# } c0 [& f
3 _/ ?5 G1 D* d2 H9 |6 {
modelSchedule = new ScheduleImpl (getZone (), 1);
% M" r4 e( p* E$ }, u modelSchedule.at$createAction (0, modelActions);
: I3 }( A) I7 O" D & }8 v; L, }8 Y9 j
return this;
: v+ K6 s5 z- k/ L, s } |