HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: L' E3 i! \! r7 ^; h: }) P0 e* m% V) B% `
public Object buildActions () {
9 u. Z* Y5 m) r. i super.buildActions();4 L) w k/ G2 K$ s- \8 v
. e. Z+ g# i F: q' f9 V3 K' m // Create the list of simulation actions. We put these in
- M0 L: A7 v# a# g // an action group, because we want these actions to be
# }2 s. o. y. V! F# Q, e, g" O // executed in a specific order, but these steps should
0 [& {; s9 c! e* O5 z. Q6 @ // take no (simulated) time. The M(foo) means "The message' b9 s2 a3 V/ G/ R
// called <foo>". You can send a message To a particular9 C0 r' I4 t B$ g' H3 D( d/ t
// object, or ForEach object in a collection.- {* n/ d: s: I* h# [, F5 ?5 S$ S# u
. {* F$ }+ D' K
// Note we update the heatspace in two phases: first run' W# }3 Q# \$ V2 b$ r
// diffusion, then run "updateWorld" to actually enact the
( N# q' o5 P* ^8 G3 e // changes the heatbugs have made. The ordering here is
4 h% a7 P; c" Y // significant!/ J5 a" d4 `$ C8 R3 @' `
6 H9 T4 x, e A+ e: L! H5 w4 J // Note also, that with the additional
2 b/ E0 ^: b$ w t- n, V // `randomizeHeatbugUpdateOrder' Boolean flag we can! ]( u+ S3 o, j# w( `: \0 ~& l
// randomize the order in which the bugs actually run
4 t o2 E; f" N" v0 M+ z // their step rule. This has the effect of removing any. T+ O5 g$ T, ?# B4 y5 `
// systematic bias in the iteration throught the heatbug
1 j; r, P! h, ~6 s // list from timestep to timestep: x; a+ s4 i+ z% f# k. i7 {8 [# a
7 m7 k2 C2 g& i; U% S // By default, all `createActionForEach' modelActions have
4 {+ s% Z$ y, { u // a default order of `Sequential', which means that the% y& m1 ^- r; g( o2 I& z2 c( q
// order of iteration through the `heatbugList' will be
1 F! A6 ?' u; Z& J& \' c0 z) [( u // identical (assuming the list order is not changed+ f7 f0 {9 w( m% u% O
// indirectly by some other process).' _+ ?; I, n) z
7 m3 e# K8 ?/ W: y/ L- n
modelActions = new ActionGroupImpl (getZone ());
; Q% O# w% U$ `# J) g5 S# }# q4 o4 }; ?2 i) I/ z
try {
7 e7 d/ W! F9 T/ m6 k3 V modelActions.createActionTo$message# a/ o& a4 k, k6 {; {% G: k: }
(heat, new Selector (heat.getClass (), "stepRule", false));
) B- V2 M1 g" J$ i, { } catch (Exception e) {7 P$ i9 K3 b, O6 `2 R. N+ |
System.err.println ("Exception stepRule: " + e.getMessage ());7 i! ]& J5 l, d8 h- n
}: ]' t) u4 m% ?, x; o3 k& z t
7 ?# [% R: y N# w
try {2 `! D# E$ i- ]
Heatbug proto = (Heatbug) heatbugList.get (0);* j1 k- L" J" A9 D S7 S) [
Selector sel =
9 h- Q3 o2 E# B* ~( | new Selector (proto.getClass (), "heatbugStep", false);* K3 U- O4 i+ `
actionForEach =
4 e0 s/ ^7 `; @$ E modelActions.createFActionForEachHomogeneous$call& d/ A" S3 v. U; _1 f% U
(heatbugList,
! o5 g' _ v9 S$ }3 X6 w7 Y' J new FCallImpl (this, proto, sel,
- Y! p3 j* L$ o2 P new FArgumentsImpl (this, sel)));
8 T; X) n2 T; a. p3 Y } catch (Exception e) {5 B7 M# ~% Z9 o
e.printStackTrace (System.err);
( j3 b {3 ^5 s, N" Y }% _; I% t3 B9 h$ V: b
0 H( L% E6 Q' W9 M' O: I! l: [
syncUpdateOrder ();
) ^! n, _) W- Z) ]; x2 S( l m- \- P3 i- J+ F8 ?& \8 K$ w5 c$ n( \' C
try {: _/ G7 {0 i+ h
modelActions.createActionTo$message
$ y' m& u/ g$ K3 H. H* b (heat, new Selector (heat.getClass (), "updateLattice", false));- _$ y: I- z# f8 I6 e
} catch (Exception e) {2 \$ o: R- D5 A
System.err.println("Exception updateLattice: " + e.getMessage ());
3 j0 ?! a1 j6 s, f' s* `7 q4 F }( e9 @" w5 R; o! z2 l4 n0 @9 E
, Y& g, }' s' ?3 U: V$ e // Then we create a schedule that executes the
9 r) G4 i. Q8 G/ E) v0 x# d // modelActions. modelActions is an ActionGroup, by itself it
& }+ G" K: S1 ` // has no notion of time. In order to have it executed in; S. I! v/ u2 _ {
// time, we create a Schedule that says to use the$ \) \3 d: Q l% ^ o
// modelActions ActionGroup at particular times. This
1 y0 O$ U6 \1 u // schedule has a repeat interval of 1, it will loop every
2 ^5 Z/ Z% y: W) s // time step. The action is executed at time 0 relative to
8 t J/ `4 c/ h8 b# ^ // the beginning of the loop.
k& M' b7 [" v3 a4 i# R# r& }
6 E7 L$ [5 d, W# a& e. B7 ? // This is a simple schedule, with only one action that is/ g( W; H+ L" }" Q
// just repeated every time. See jmousetrap for more
, T% X, \3 F* T [ r // complicated schedules.
5 J/ a6 q+ w- i5 j
E$ Y$ }: {* [0 E modelSchedule = new ScheduleImpl (getZone (), 1);
4 \3 Q- ^9 k2 c9 J8 o modelSchedule.at$createAction (0, modelActions);
( D; ?% r. Y+ g7 B ) G: Q. O6 g' }/ B. {6 ?- h
return this;
) E' h* ^# h) z5 r1 T6 H } |