HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
O1 W, n9 j8 K" g6 A
* `0 Y( Q$ Z( I" {3 a public Object buildActions () {1 X3 I0 e$ S( t+ \; t5 S5 ?
super.buildActions();& `( k j& Y! o2 `, I
. w/ O+ W7 h, ?# M u // Create the list of simulation actions. We put these in
7 d- j* {. D9 l8 C: w+ | // an action group, because we want these actions to be
. d' t) H, O" M: w2 @ // executed in a specific order, but these steps should" i- a8 k9 ?$ L$ {! i, ]( `& X
// take no (simulated) time. The M(foo) means "The message4 }& G, i1 N5 E' U1 W0 e5 o4 j6 R
// called <foo>". You can send a message To a particular. N' Y" j, @+ a% _" c# @
// object, or ForEach object in a collection.
" Z) F; s) T( ~- O5 T
5 N0 C0 y a9 j5 x // Note we update the heatspace in two phases: first run
. c. G I, D' E d1 N$ k- m // diffusion, then run "updateWorld" to actually enact the) s, _3 n# F, n: ?" K& y/ e, Y: H. s
// changes the heatbugs have made. The ordering here is
: s7 Z4 s6 A# j8 l7 B" T // significant!
! n! L% x: L4 f1 X' t( N . L. z9 X% z% q |. z* G
// Note also, that with the additional) Y: z2 T( |" @# P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) `' X0 T1 O* F8 L5 j$ \ // randomize the order in which the bugs actually run9 m1 T9 o1 ^5 M- @, v$ ~3 }
// their step rule. This has the effect of removing any4 a; B6 ^4 _& d6 Y1 C
// systematic bias in the iteration throught the heatbug
$ m" y r( a5 j/ X/ H. D5 @+ Z // list from timestep to timestep
2 w5 D. A$ d& \& [0 H- C
# f& |# g- c# f$ M% q8 m# O# O% b // By default, all `createActionForEach' modelActions have+ k: r7 w, q, v5 Q
// a default order of `Sequential', which means that the
1 K) z. ?; Q; V. N // order of iteration through the `heatbugList' will be9 q% A9 `' r0 E* ~+ _- C5 q" }
// identical (assuming the list order is not changed, Q" H! ~, a7 G6 A
// indirectly by some other process).2 D: Q* o# U( P7 y! q. ?* J
v& B) g2 [& X, Y modelActions = new ActionGroupImpl (getZone ());0 u+ m1 R1 q! D1 w! x V& d. R7 w
1 Y0 X- M8 R; P try {
) y6 Z$ X6 z* U1 t modelActions.createActionTo$message( }! M$ [* P3 o) F7 E
(heat, new Selector (heat.getClass (), "stepRule", false));1 ?4 z# A y( u( g& P$ z! }( M
} catch (Exception e) {
5 W3 F6 C7 f' M/ b( y* d% | System.err.println ("Exception stepRule: " + e.getMessage ());
9 h6 K/ c; q* u# i% \ B }" i+ u: @% @9 |: E9 c* [
% `! r o7 u0 q4 O l try {. |$ T' _5 F4 H, ~0 @. s7 e* V
Heatbug proto = (Heatbug) heatbugList.get (0);
9 d, Z `! _& I/ a; ^ Selector sel = 4 U- s# [0 Q1 I
new Selector (proto.getClass (), "heatbugStep", false);
+ K- M8 C1 I6 r) R/ ? actionForEach =( \9 u C& l- M! K; d5 [6 T
modelActions.createFActionForEachHomogeneous$call3 y w3 |+ a( k1 z
(heatbugList,
; Z8 N P. a3 X9 ~7 ]; U! G new FCallImpl (this, proto, sel,8 b$ H5 K; N5 i% k
new FArgumentsImpl (this, sel))); d q7 N1 C" o( P" v' `
} catch (Exception e) {
* p8 e0 V( F' v7 j8 g e.printStackTrace (System.err);. J7 ]6 Z$ j# T' m
}
# O+ x4 |$ z; @/ a
/ Q, M0 l$ ?. r [, F) ` syncUpdateOrder ();
7 Y. S5 d" n, `- V# v% s# n: Z+ Q, C$ l3 l- u% N+ x8 ?! {; d; b7 r i
try {4 |; g) J7 s, m0 D3 Q
modelActions.createActionTo$message . D9 f0 X) c, M( S/ J+ G
(heat, new Selector (heat.getClass (), "updateLattice", false));
' \9 I. k6 R1 `5 c. r- x7 P } catch (Exception e) {
6 b* N, R; C% J$ ] System.err.println("Exception updateLattice: " + e.getMessage ());# C( J$ V+ r3 {
}+ P$ D3 u- ?# {1 X3 V5 F- H
$ h4 V; x. g" d4 X% z' U
// Then we create a schedule that executes the
! l V4 p2 \! q g6 c // modelActions. modelActions is an ActionGroup, by itself it$ H" l( \: d1 t
// has no notion of time. In order to have it executed in8 k0 A4 ~! L1 o `
// time, we create a Schedule that says to use the7 N) b9 J5 e" u" d7 q- S
// modelActions ActionGroup at particular times. This6 _( |& w& T5 O# v9 t9 W7 Z
// schedule has a repeat interval of 1, it will loop every
/ R: P" V3 ~7 [% v# J4 I // time step. The action is executed at time 0 relative to Z. E# @ \) F9 s J7 Y; F6 {
// the beginning of the loop.
1 J4 T, v; ~; V- `. N
. |$ h ~( k+ }9 i4 R; | // This is a simple schedule, with only one action that is
$ E4 C: y/ ]/ j // just repeated every time. See jmousetrap for more
/ Q5 V) }1 {% | // complicated schedules.
! c. ?) d4 e1 |1 r% w , P1 l- ]* D. u5 p- c7 s. c
modelSchedule = new ScheduleImpl (getZone (), 1);
6 [4 J2 @7 u, O# X: T7 C* w- Q modelSchedule.at$createAction (0, modelActions);
. _' u( z; O2 V4 Y9 x' L0 G, _
& o7 g- K8 t# `! Q" ~ return this;2 L- a! o; q( D& ?, ]
} |