HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* A! `/ j) |1 j8 L0 y @) _$ N; _' K2 n* z/ R1 q
public Object buildActions () {
; v t1 V1 e/ K l+ i super.buildActions();8 M% C# ~+ @' N0 X
! M# N$ ?3 _* ^) l" v& f // Create the list of simulation actions. We put these in# Z( J; i5 |4 C3 @/ h
// an action group, because we want these actions to be
0 X2 l9 w+ O9 x, I% s // executed in a specific order, but these steps should
3 B( L" w* U, F' C // take no (simulated) time. The M(foo) means "The message( g: D; [3 f8 R
// called <foo>". You can send a message To a particular
$ l* U. k" |. y [, i# i) g // object, or ForEach object in a collection.+ R' R4 Y# H# s! K5 `9 B
1 h" ]: f! ]2 O2 I; N // Note we update the heatspace in two phases: first run
$ `+ N; K- \% |0 P. p( `+ U // diffusion, then run "updateWorld" to actually enact the! S0 ?& B6 _: j7 a: ]
// changes the heatbugs have made. The ordering here is: e1 @ b4 U) ]
// significant!" n+ @! s G4 L. f( M
: Z: e0 l% p' c2 A
// Note also, that with the additional: V. D3 M" l9 {, H7 X% j* U; B* _8 {
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ J& i8 }& I+ |* z% T8 p' G! _
// randomize the order in which the bugs actually run% Y6 U, \: Y* D. S9 C2 d
// their step rule. This has the effect of removing any
# r5 t4 l9 x2 E1 G // systematic bias in the iteration throught the heatbug
1 _$ X6 A3 P% D, D+ z! Q- |) I // list from timestep to timestep
3 k2 l5 }3 {; G4 K! T2 \
$ q, A# r7 ]- R3 Q! b // By default, all `createActionForEach' modelActions have% E! x% B5 V6 P3 X0 [" {, Z* g: K0 O$ {
// a default order of `Sequential', which means that the
* o# G" J: b& p8 F6 f // order of iteration through the `heatbugList' will be# \. s& J ? V
// identical (assuming the list order is not changed2 [5 }6 l! ~+ ^7 ]
// indirectly by some other process).
i6 S6 Z- |$ `5 I U* r, V " S' r6 `) v2 a
modelActions = new ActionGroupImpl (getZone ()); v `% Z$ }1 _# D2 M
- T N& ~7 Y' w$ }, F0 P4 T4 u
try {
( x. j) n- p g. Y, | V8 O, j modelActions.createActionTo$message# c* q$ j+ D7 t0 |% }1 R
(heat, new Selector (heat.getClass (), "stepRule", false));
; V2 B! ]6 n7 p9 f" A8 N& Q8 Z } catch (Exception e) {# b4 O, s+ s# E3 @
System.err.println ("Exception stepRule: " + e.getMessage ());
9 [8 O+ z: c& e! E* z8 N }
. R; `; ?# o9 O
# x: ?/ O* [) o' B" E& E try {
" l- R1 q+ g+ F& U6 c Heatbug proto = (Heatbug) heatbugList.get (0);
0 K( V; e0 x: K+ w Selector sel = 3 I Q+ z$ R( s3 Y& D- p
new Selector (proto.getClass (), "heatbugStep", false);( x6 _0 q6 p2 K- N. _" q" s
actionForEach =
& f% H& U8 \5 l& o t modelActions.createFActionForEachHomogeneous$call, E1 I, B9 h* O: h, e
(heatbugList,
, _( f- q t, K4 k( S new FCallImpl (this, proto, sel,
! j# [+ R, F+ q- l new FArgumentsImpl (this, sel)));
- I9 d' \; V, [* X, `1 H } catch (Exception e) {
3 v _8 ^6 P8 @* H e.printStackTrace (System.err);
5 P: J8 |$ ?( o3 @, s8 j* `* Y }( Q& A& l+ C% H
- A1 d8 r9 v' q, r0 E syncUpdateOrder ();9 q; r9 h% p [
. a% l: i5 L' K* F% j# t& L' ~ try {
# O% ] `3 X& b- b% {0 T# K modelActions.createActionTo$message
! K6 Y0 V; V2 _; F4 N (heat, new Selector (heat.getClass (), "updateLattice", false));: Q( w) R* l" m8 t9 e# B6 R
} catch (Exception e) {
( p/ C/ K& q0 p3 t4 m G System.err.println("Exception updateLattice: " + e.getMessage ());* j* z% E" v5 f6 f
}+ D; l( Z& E4 Z4 u" T* ]; {
& M: e) \! T! s* E // Then we create a schedule that executes the8 C N0 D( V6 M2 n
// modelActions. modelActions is an ActionGroup, by itself it
( K8 @6 v8 R+ J4 O, y. z% y // has no notion of time. In order to have it executed in
+ U+ ~8 A) v N // time, we create a Schedule that says to use the
/ W. D; }5 @$ Q, { Y // modelActions ActionGroup at particular times. This
0 F4 ]9 d$ j2 b) c1 G8 } // schedule has a repeat interval of 1, it will loop every
$ ^2 b1 m2 f2 W } // time step. The action is executed at time 0 relative to
7 t3 `. u+ G6 j1 ~/ R8 ?; o // the beginning of the loop.
/ S( \4 u: L% s( a: K0 l7 O& [1 ^
5 ?+ L u W ~9 ]# r, b% g // This is a simple schedule, with only one action that is
1 x6 X" A3 Y x# t) k1 | // just repeated every time. See jmousetrap for more
5 t2 q* l7 s% r+ {/ {0 }/ E0 S8 P // complicated schedules.
$ v. I* ]4 v- I" C6 O: | $ Z: k$ R5 d, Q& h% o6 G/ k
modelSchedule = new ScheduleImpl (getZone (), 1);
4 I w( d" V8 F1 _3 r modelSchedule.at$createAction (0, modelActions);$ n' n+ Y5 ~- _- G; w& {
, t z3 X6 K3 X7 B9 M, _ return this;; B x' P. h& ^- P) ?, }
} |