HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 E% u: x9 Z, U- |, d' { E7 n5 J$ Z' v; _
public Object buildActions () {
% e- G3 U7 C5 v9 S, |5 q super.buildActions();- N7 K P" G) P! v5 z" ?$ m7 B! ?
) T* H& H d S: U% P+ H) r // Create the list of simulation actions. We put these in# e9 n$ C0 i3 ]
// an action group, because we want these actions to be
+ k+ Q- t0 I0 s" i // executed in a specific order, but these steps should$ d: @2 X$ L, N) S4 l! c0 p
// take no (simulated) time. The M(foo) means "The message
7 S s, E7 p, z/ V8 c9 L$ K // called <foo>". You can send a message To a particular! \/ L1 ~6 @7 \$ T& V
// object, or ForEach object in a collection.
# x; u6 W! f0 [' x6 P5 Y+ P
6 t4 V) r X- W" o" ~6 K3 r // Note we update the heatspace in two phases: first run. z5 a. }# j$ |+ t8 Q
// diffusion, then run "updateWorld" to actually enact the
8 k) h8 `6 |# K" O* [ // changes the heatbugs have made. The ordering here is+ I% J0 b N- Z; {$ o4 J
// significant!! E1 u+ w9 |! j4 o( y9 l
& o0 @3 a7 @5 v9 r2 a
// Note also, that with the additional/ q; \& K2 z: A6 A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; \$ w) p! m! F // randomize the order in which the bugs actually run
3 [ U2 }0 |+ C! \ X& [ // their step rule. This has the effect of removing any3 N3 z! _( {9 Q6 j" R
// systematic bias in the iteration throught the heatbug
2 C0 |3 A8 A. A B6 m$ Q; X // list from timestep to timestep
" r. o- F4 W" B; I: i6 A
3 E, p) ] }3 ~: t // By default, all `createActionForEach' modelActions have
* y8 K5 s, h2 D7 U/ } // a default order of `Sequential', which means that the+ M& B) [# ?2 I# ?! M
// order of iteration through the `heatbugList' will be4 P* T1 _( `/ E+ R# U2 |' c/ ]
// identical (assuming the list order is not changed
7 Y/ o$ o: ^% N& f // indirectly by some other process).* t" H- G+ a: c$ }. N
+ r% j: [3 B0 }& W4 ]2 _( t modelActions = new ActionGroupImpl (getZone ());
% ~4 ^7 V, @9 u# I+ d
# v% G3 T# v* p4 k+ ^! H7 i9 a2 b try {
+ N; j1 N! q1 {- S/ x2 O modelActions.createActionTo$message
( K* y+ u( b |6 B (heat, new Selector (heat.getClass (), "stepRule", false));
4 n- l4 J8 _" ~- ^9 x( v: S1 \ } catch (Exception e) {
m* ~' t( x4 {: Y% ^9 v+ v System.err.println ("Exception stepRule: " + e.getMessage ());
, n! ]5 D0 J7 u8 i8 A- E }- H. x; P: M2 x7 u
7 `, C3 y5 S! z! v2 D3 W
try {, Y- |4 S0 A2 t8 y
Heatbug proto = (Heatbug) heatbugList.get (0);
- @& M. m: U" b3 o- f Selector sel =
) F0 C7 t; G* E8 G; z( \ new Selector (proto.getClass (), "heatbugStep", false);
# s% D6 A g2 n2 k9 c6 L( E- p actionForEach =
4 r# v. l- P/ f6 C modelActions.createFActionForEachHomogeneous$call
& @4 U5 P6 O& {, j2 U8 U F7 W, Y6 o (heatbugList,
, I- R+ E4 A: M' _% a new FCallImpl (this, proto, sel,1 h ~3 ^* F0 K8 u8 l5 D2 }9 S
new FArgumentsImpl (this, sel)));* P/ O$ d: t" Y* o8 f4 z- I6 G
} catch (Exception e) {
( i2 \2 i8 }3 Z6 \ e.printStackTrace (System.err);. X0 l3 r3 \& ~; z0 F+ q; o
}. D8 A& t+ V6 u0 e" V; \- h
: `# y3 o$ S& [, C0 L( i syncUpdateOrder ();1 S0 A7 |! q) L
% B6 q6 V7 m. }2 }/ v8 y4 | try {8 K1 p6 H) }* q# [! |6 x
modelActions.createActionTo$message
: b6 t+ G4 |1 Z% P5 B1 s (heat, new Selector (heat.getClass (), "updateLattice", false));
, k5 D* [$ v/ ~9 N } catch (Exception e) {
+ R% s+ H' q" l8 U5 l @ System.err.println("Exception updateLattice: " + e.getMessage ());
/ @. N( W7 b! E0 P }
! \6 K$ k& F" k) A, c $ F% E' i6 ~' H# ]4 g
// Then we create a schedule that executes the- h7 X2 f1 k) p7 C4 [/ P. O$ D2 X
// modelActions. modelActions is an ActionGroup, by itself it
8 l5 Y8 [, W. P! E$ z! }0 B5 H // has no notion of time. In order to have it executed in* t2 {( S( z+ ^0 l3 ~/ K, m
// time, we create a Schedule that says to use the
6 m* i9 B6 O' H6 s, N // modelActions ActionGroup at particular times. This" ~ j& G! _0 q4 C
// schedule has a repeat interval of 1, it will loop every5 l! }! @1 ]# W8 K( g
// time step. The action is executed at time 0 relative to
( G$ V3 `* N% R- g. h( _ // the beginning of the loop.
7 U& @# E6 \" {5 N# i2 p, D7 Y4 P2 P
// This is a simple schedule, with only one action that is
. i+ U; p; {7 j4 l9 }5 q/ g // just repeated every time. See jmousetrap for more
9 L$ q* L/ f) V' G# N) G$ T // complicated schedules.0 S5 |" r9 Y+ n# ~# K% d0 _
& p1 ~+ a, f% d- ?! S- @6 m1 w modelSchedule = new ScheduleImpl (getZone (), 1);
4 Q! [9 f8 s; S w2 y" ]& ? modelSchedule.at$createAction (0, modelActions);, v' E% e+ e9 ?0 c: G/ {
% i( [% }, X, Q
return this;
$ [8 u: T7 ~3 _' ~8 f1 k } |