HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 Q0 N. v- Z1 z8 i( {8 U# j2 y6 z6 C
public Object buildActions () {. ^2 R# Q) `# I/ `/ l& ]
super.buildActions();" J% z- z: ^/ Y" ~5 Q5 R
0 }8 F( v' W" @" K ~+ H) J
// Create the list of simulation actions. We put these in1 T2 y3 v- g) I) q# i9 ?6 r
// an action group, because we want these actions to be4 R. H# J- W. p: @) y7 j2 I& C
// executed in a specific order, but these steps should
" u% ] F. @0 S: S: `: K // take no (simulated) time. The M(foo) means "The message, R( d/ y. p ` h1 E' m2 l% u
// called <foo>". You can send a message To a particular$ R8 M+ {/ h0 G) S
// object, or ForEach object in a collection.
, ^2 a( Y% g; a! y# W
8 k s/ o! u9 L# R8 \5 L' v // Note we update the heatspace in two phases: first run
# S# r1 m4 l: z5 n! g" e // diffusion, then run "updateWorld" to actually enact the
c$ U" M' k6 O+ I& r // changes the heatbugs have made. The ordering here is
% a, j3 D8 r! l3 [8 j // significant!* ^! ]4 b. U3 ~
W* M7 k, G. [5 B) h$ d# u // Note also, that with the additional0 J3 y$ y" ~: _. q9 w7 D0 J
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 ]0 M5 ], C3 N, `6 R
// randomize the order in which the bugs actually run
( l: F1 K M+ F9 i) T" X // their step rule. This has the effect of removing any
# S5 s7 f* Z: a$ Y; l, W // systematic bias in the iteration throught the heatbug. S" L, j- ]8 f: W
// list from timestep to timestep7 ^) L: Z: f. l0 E- Y
* \! Y( w1 t+ @- D5 H5 c // By default, all `createActionForEach' modelActions have n, `2 L/ x( C: ]% [2 G) r4 a# w
// a default order of `Sequential', which means that the( C3 b: z- R! u
// order of iteration through the `heatbugList' will be, t/ P; q3 S$ U. w
// identical (assuming the list order is not changed5 T. `3 K# T. k1 Z/ P: t4 |
// indirectly by some other process).
7 z! W7 t7 B) A& G2 o8 q4 i! J8 y 2 N3 D {; P! g2 W' H+ r, w
modelActions = new ActionGroupImpl (getZone ());
. [& T3 N+ @, y1 V8 F3 Y2 x0 m% g3 L* b3 ^# G9 m
try {5 G, N( ?, f! c* C" ~- W k) a8 W
modelActions.createActionTo$message
/ @+ K! L! J& c# l (heat, new Selector (heat.getClass (), "stepRule", false));
5 o) c1 t0 e9 _% d' Q* i! Q& D } catch (Exception e) {
* q% @( p& u* |7 J; I3 {# L# k System.err.println ("Exception stepRule: " + e.getMessage ());% t$ [% @ P& z! M" E; k# J9 f7 j
}, M0 q7 D0 O$ N* W. J2 J
( e3 _$ m1 D& ]# p" |! ]/ U: n try {* O! L0 s1 {- L; Q& a0 e. r
Heatbug proto = (Heatbug) heatbugList.get (0);7 G. ~! y% u% D* w$ u: |
Selector sel =
7 r$ ^8 \& o+ o, ` new Selector (proto.getClass (), "heatbugStep", false);/ n' L" ]* R6 E; q
actionForEach =- \, }* H/ P7 B4 @
modelActions.createFActionForEachHomogeneous$call7 }/ ]- ^% _* M' d. p
(heatbugList,4 @. U( z8 c- W1 \& ?: S
new FCallImpl (this, proto, sel,
* I4 K. m. h" f new FArgumentsImpl (this, sel)));$ }$ x. J8 c' O; I& f
} catch (Exception e) {) M& ]2 z* V9 ]( |& x+ i3 s
e.printStackTrace (System.err);
/ i& N( T$ E g; J( x }
$ s% |6 X# J. I' D5 X
2 M: O7 j% k, r; v' y; I8 G syncUpdateOrder ();
- ^1 h% W6 I! b9 N# }% ]. }1 H- O7 ]$ V/ m$ Y7 h4 U
try {
- |! ]1 A: Z# E# b7 i0 F" a- V. B modelActions.createActionTo$message / X# e5 ?9 X9 M- \, M& e. B# \
(heat, new Selector (heat.getClass (), "updateLattice", false));( E$ M4 l7 G' X% i
} catch (Exception e) {
% N9 q1 {2 Y5 R% Q+ Z8 i! A4 H System.err.println("Exception updateLattice: " + e.getMessage ());& Q! ~/ N/ H C- {3 D" Z! y. o
}
: K( U% V. J. R) A+ A, J" R4 Q! R
' F, ^5 h \6 u0 k* i // Then we create a schedule that executes the$ O5 N" `% \3 L0 [) o( a6 m
// modelActions. modelActions is an ActionGroup, by itself it
: i- f' h6 I# S // has no notion of time. In order to have it executed in" d" @, A8 X0 n( {
// time, we create a Schedule that says to use the
/ K" }) J* K4 I9 Q: k9 p // modelActions ActionGroup at particular times. This ]: }$ `- R' o# [1 `! H, t
// schedule has a repeat interval of 1, it will loop every
7 J0 O4 Y( K9 m5 Z7 I // time step. The action is executed at time 0 relative to
) D# Q( t6 j w2 N# u- h // the beginning of the loop.2 U6 V8 e7 d$ k: _2 f9 d& E7 ]) A
4 X/ v% `% m9 t$ b) v
// This is a simple schedule, with only one action that is
F9 v: v1 S4 U( t // just repeated every time. See jmousetrap for more9 J4 P! `* v, ?/ I
// complicated schedules.
1 R; l) J* Z# |' K/ r
' y9 t9 x& _% F9 c' I& z modelSchedule = new ScheduleImpl (getZone (), 1);2 Q) E; U& v# O8 j6 r8 B! i
modelSchedule.at$createAction (0, modelActions);
2 B9 [- E4 s7 ?- ^ % |- T( p, I3 W8 e$ ^! c6 G. D/ t
return this;8 e+ D9 U0 ]8 O) J
} |