HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) ]; H Z6 |. ^; `' L R& L
! L- J: d+ U* L/ Q$ M6 M public Object buildActions () {
* t" t. m' M2 k% k% i# Q super.buildActions();0 F% x( s" N8 ?
- B6 v8 \: H1 x
// Create the list of simulation actions. We put these in
# |" s; t8 M; O3 p$ N2 I8 \ // an action group, because we want these actions to be
. o2 ~7 y# p, l6 a# k // executed in a specific order, but these steps should$ x* C% e/ H% p
// take no (simulated) time. The M(foo) means "The message, m% K- C/ K. [1 S9 G
// called <foo>". You can send a message To a particular
4 N& P$ D2 _6 f3 z: Z* z) x; M6 F // object, or ForEach object in a collection.( |, }9 X0 R3 c, h u7 _( u9 i* @
, O1 \& @- m% Q' b# H4 J
// Note we update the heatspace in two phases: first run* M- s8 |8 e" _/ ~, M, r
// diffusion, then run "updateWorld" to actually enact the+ K# z1 j/ T' `+ k4 P4 {
// changes the heatbugs have made. The ordering here is
/ f5 w8 E1 r6 Q u1 z! W+ ?0 I6 O // significant!
! w6 E# M; ~1 h* v- Z # G [% O& f# u: i0 z5 [7 ?2 H4 q
// Note also, that with the additional8 q' e' d/ W. p5 [
// `randomizeHeatbugUpdateOrder' Boolean flag we can) ^) A, W8 I& a' N* o$ y2 t
// randomize the order in which the bugs actually run+ Q2 m& n+ E# l4 g/ W1 ]4 y
// their step rule. This has the effect of removing any
3 a" X3 z0 o/ x0 x& a // systematic bias in the iteration throught the heatbug
$ d! H" u+ \9 c/ o+ X4 V7 A // list from timestep to timestep: q7 @6 P) C2 i- h0 m$ M% a
& J! [/ T" l' L, w; {8 Z8 N // By default, all `createActionForEach' modelActions have
& w, `5 p% j! W8 A* @! K; j0 B" b // a default order of `Sequential', which means that the: }3 T* I: Z; A
// order of iteration through the `heatbugList' will be
! @, q8 `: f7 K, ~! x, A! Q // identical (assuming the list order is not changed
; `! @7 |+ g1 _- `; }; E$ Z2 O // indirectly by some other process).% s$ ^8 O7 i6 h8 r' a- P3 }% C9 K
; _" g9 }- |+ R6 N0 `2 V) j modelActions = new ActionGroupImpl (getZone ());, ]1 x* F7 v' V
+ z* V9 o+ s$ ^( F try {- X* q4 c$ k m6 A( k; Z: a: c
modelActions.createActionTo$message
. K; t; v. ]* S (heat, new Selector (heat.getClass (), "stepRule", false));
+ B$ O, ^/ ~" z } catch (Exception e) {
4 L+ t2 R6 U' q# D/ G M& w System.err.println ("Exception stepRule: " + e.getMessage ());3 Q' Q" k) _1 r1 C4 T5 P
}& m3 G- R6 u( e) I" {+ K
- n3 B9 f: ~4 k/ p& t
try {2 Z: X& I X3 L# k, T( A
Heatbug proto = (Heatbug) heatbugList.get (0);
4 f# O3 i& D* J2 u: @- K1 K Selector sel =
1 O* B7 _ R4 F: p' I, ^7 ^/ ? new Selector (proto.getClass (), "heatbugStep", false);( ^8 l; G5 K/ n: }0 M% i* x- b
actionForEach =2 ]" n' A3 Q* a! \* q
modelActions.createFActionForEachHomogeneous$call
* T* Y9 }$ \8 h% c: x (heatbugList,
; Q1 l+ C% c0 b new FCallImpl (this, proto, sel,* V( r5 R0 N3 u7 u
new FArgumentsImpl (this, sel)));# p8 D# X# H" O. @( K, Q. n
} catch (Exception e) {
6 ?4 A$ q$ O. j, { e.printStackTrace (System.err);) X2 R' h) }5 k; J& N }
}
7 j/ M3 D1 d. K# y5 t' u' b % q4 N+ F' Y& N) Z( h* w
syncUpdateOrder ();
; i" V) {, N7 g& z" S
7 w4 z3 L7 `' {- M" c5 y. C& H! S try {
4 |* w. p0 q. x) @8 s1 Y+ Z modelActions.createActionTo$message F# m! w0 ?' Y3 x$ o
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 p- J+ \" A; o } catch (Exception e) {
8 ~' {) \8 V: D* m9 S System.err.println("Exception updateLattice: " + e.getMessage ());$ S% S; ?) |! C, Y3 S% u7 G4 C. m
}
7 b% ?4 |$ f/ J& `" W# X# L
3 \6 M5 E; _8 d6 F$ | // Then we create a schedule that executes the& l8 e2 R" `9 r0 m
// modelActions. modelActions is an ActionGroup, by itself it
: G9 C* V ]1 E' X // has no notion of time. In order to have it executed in
$ C( i; \: b+ Y% f, J& D // time, we create a Schedule that says to use the
6 m# q: X W o" K; C. E // modelActions ActionGroup at particular times. This
5 Y/ e% G) J/ E, t% U N- G // schedule has a repeat interval of 1, it will loop every& r' H5 p' C7 q: y M5 |9 V& ^
// time step. The action is executed at time 0 relative to
8 V' n) ?2 C$ ~/ l // the beginning of the loop.
; }7 k0 B; O7 R7 N8 b' N! Z/ L6 p* ]0 z7 q3 W H3 r
// This is a simple schedule, with only one action that is
, b, e6 a8 l2 h) B" b W) n9 n // just repeated every time. See jmousetrap for more9 [. H1 g) b7 t6 _4 ]
// complicated schedules.
$ u; F0 a7 n/ k& X
4 f1 d. o7 O0 H* Q modelSchedule = new ScheduleImpl (getZone (), 1);& q9 f2 J& s) Q6 H" f. g" O) b' z6 r
modelSchedule.at$createAction (0, modelActions);
J+ i. _, F g# L3 q; f F, @
. C% L4 s/ P, h3 |5 f return this;/ W* s5 G: l6 |1 F
} |