HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" V( ^# v0 ?, j3 y: |+ {( Y
: L% P, q5 B, G2 C; e! o public Object buildActions () {
5 B6 P! z9 ?1 {3 O! `) [. n) M5 _1 S super.buildActions();
/ J" p7 e6 K8 e; M) G 0 [5 ]& W) f1 C$ a2 \' b
// Create the list of simulation actions. We put these in
A! _: B3 y+ z" w7 Y0 \% R% p // an action group, because we want these actions to be
6 U) D; W. Q) b // executed in a specific order, but these steps should
; x3 U# S5 o# u0 A // take no (simulated) time. The M(foo) means "The message
% u5 J2 U) U, d8 k1 j // called <foo>". You can send a message To a particular
" ]: V" q& {+ I+ r2 K& T. o6 | // object, or ForEach object in a collection.
5 o }& S0 y. w/ l2 f6 q9 O( i) h , h9 R2 T* q: r1 v5 ]; f
// Note we update the heatspace in two phases: first run4 p/ b) x4 e- M$ v- f/ `- v
// diffusion, then run "updateWorld" to actually enact the! l/ c( S' d3 O) j! X: d$ y
// changes the heatbugs have made. The ordering here is
8 {* @1 k- Y/ \ // significant!
m9 n# O5 c, t) j( r% u+ R5 W+ @ ; S' v9 ], x6 {* t/ T
// Note also, that with the additional- A! _- [1 J( {1 |% Z+ a
// `randomizeHeatbugUpdateOrder' Boolean flag we can) Z2 o4 u! U4 X% W
// randomize the order in which the bugs actually run6 u, w4 S( i3 V
// their step rule. This has the effect of removing any$ _( n& B# O* U# K A. d* K1 v4 q
// systematic bias in the iteration throught the heatbug
5 s, J0 y6 M3 q8 F4 } // list from timestep to timestep
# S9 v4 \3 k' K1 f3 x 8 w% w* K4 u" i; S
// By default, all `createActionForEach' modelActions have
: |; R% \6 O& b // a default order of `Sequential', which means that the
9 ]& R0 f5 v/ Z, v4 y/ C. k3 v' L* ? // order of iteration through the `heatbugList' will be1 u& z: G- }2 G! c* U: M
// identical (assuming the list order is not changed
: d2 s. B- j0 D( K9 a' G // indirectly by some other process)., K4 Y9 G/ O1 f" r
. |. A' `; e+ T" z: e0 r* t) v, q+ }! e modelActions = new ActionGroupImpl (getZone ());( J- Q- b+ l6 Q( c& E4 H5 ] E% Q
1 o* f9 Z3 D: \
try {
$ k4 K. ?/ ]4 F$ r5 Q- p) {' D modelActions.createActionTo$message; z/ O" A6 F, m
(heat, new Selector (heat.getClass (), "stepRule", false));- Q" \6 ~$ s' E0 H$ v w# T. R
} catch (Exception e) {
l% Y% W! y- } System.err.println ("Exception stepRule: " + e.getMessage ());
: u# z! m8 @5 Z0 V. h1 A; q }
; C2 b* W) o" [# d ]
. C( z0 s' L+ i try {
. S' `. G2 D3 J Heatbug proto = (Heatbug) heatbugList.get (0);+ Z2 t+ s# G2 X- n
Selector sel = 4 L8 S& U3 G( H4 w! e) T! h M' U
new Selector (proto.getClass (), "heatbugStep", false);
8 ^1 z, R" P/ | actionForEach =) M9 s6 R' \0 h# [# ^
modelActions.createFActionForEachHomogeneous$call
- K# J# O) [: N( U6 J$ A3 {2 e (heatbugList,
" i5 ]* |* H3 W6 s5 y new FCallImpl (this, proto, sel,
* i; T. l3 q6 f2 P" x/ Y% _' b new FArgumentsImpl (this, sel)));" T: }' i0 a7 h$ e& i
} catch (Exception e) {+ F0 x& j0 p2 G+ J9 E+ h6 j, q( [! R
e.printStackTrace (System.err);
! q/ B, e! t) g' Q }
. W K1 v& A% M9 J
! P5 ~0 x5 p5 Z0 j) ?9 e* ~/ H: Q+ y! \ syncUpdateOrder ();# D7 w# a* v# a) R' J
; N) q1 v3 I/ b `3 ^8 }% I. M3 P
try {4 O- Y7 K6 u, T
modelActions.createActionTo$message 7 a$ T' y2 V" `( U7 r7 O& ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 b5 ?2 c/ q! a( N! i } catch (Exception e) {
% [ f8 {/ u5 r: k- c( i System.err.println("Exception updateLattice: " + e.getMessage ());
$ N `3 y- y* w! T6 t. s }
" G5 k6 f& \4 c; m: y) ?- |
% m+ w- w7 O$ z // Then we create a schedule that executes the
) a: |. o0 E, X$ b0 i! r% E* ] // modelActions. modelActions is an ActionGroup, by itself it Q# {) ?# o. ~! e' i& m
// has no notion of time. In order to have it executed in
" |7 P* ^$ I) S; Z1 o // time, we create a Schedule that says to use the
& ~4 ^3 |1 u @ // modelActions ActionGroup at particular times. This& C: ~' ?' v+ g! o, F5 w
// schedule has a repeat interval of 1, it will loop every8 k) o* g7 w- e, k$ N
// time step. The action is executed at time 0 relative to
' w! ^: O& e# l) ^/ l // the beginning of the loop.
2 {$ n+ k5 k, P- Z1 f5 p- r M' h: ?$ l {
// This is a simple schedule, with only one action that is
2 a" O+ r, ~3 m( f l // just repeated every time. See jmousetrap for more2 F0 g! {" W- \
// complicated schedules.
7 \' d2 J1 g% I; Z- r1 g0 R & A0 j1 l" W, S5 G
modelSchedule = new ScheduleImpl (getZone (), 1);' O2 ?9 \2 i6 o6 B5 C9 q
modelSchedule.at$createAction (0, modelActions);$ Y# a+ \- v( B( A9 N( v+ }
! v7 F! l6 d1 U/ z5 Y6 M( s% E return this;3 b" {0 c' t5 e0 y3 C# i
} |