HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# S5 q. f' o+ Z2 X. n
/ h8 B* N( U( l8 |& u
public Object buildActions () {; Q$ X4 {: h3 }
super.buildActions();+ G8 ]8 z6 }: v, S. _
! p( u3 m9 c L* w // Create the list of simulation actions. We put these in& n$ h, q r: E' \& W! Q5 f) U, N
// an action group, because we want these actions to be: u! \4 K1 ` @; e) T5 s0 j) l
// executed in a specific order, but these steps should
6 h$ `) s9 e: V+ j" } // take no (simulated) time. The M(foo) means "The message
5 w; w4 ?+ _& d' s4 I: j // called <foo>". You can send a message To a particular
; h& e* f# y! m7 N) N // object, or ForEach object in a collection.% F# @2 D ? l7 j' L; s& L! o8 b! M
0 {" {2 z7 M. O4 L$ U // Note we update the heatspace in two phases: first run6 v0 T8 u4 J( `1 w$ Y" \
// diffusion, then run "updateWorld" to actually enact the
6 J( [# E* g" g! C& t* X0 D // changes the heatbugs have made. The ordering here is
( _" f% W9 _, G# q H- {6 g3 \ // significant!
0 k8 n+ b! G7 [' y0 c) S 6 p, y: v# h* m" I
// Note also, that with the additional; ?* h+ Q3 e( X. ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can, O! u" ?9 S2 m5 K4 u1 d. l7 K# ~ `
// randomize the order in which the bugs actually run8 H3 `! j' t1 t( T4 f; @) y8 ~- a' R
// their step rule. This has the effect of removing any
. f0 O- O* C8 \ H( `& [ // systematic bias in the iteration throught the heatbug
: F! P2 e7 S' [4 w7 P& u3 m // list from timestep to timestep3 g0 x7 G8 ^. M( K
K9 b6 L% z; p! p W // By default, all `createActionForEach' modelActions have
- b3 F; ?$ L' G/ m // a default order of `Sequential', which means that the
, m5 o; l- V4 E // order of iteration through the `heatbugList' will be
5 Z- i" M$ o" |) q // identical (assuming the list order is not changed
/ y; p2 c/ b' W // indirectly by some other process).
6 ?# `% N* R3 v ( J" L( {* T5 w- N6 h
modelActions = new ActionGroupImpl (getZone ());
8 _' n3 O t% l
' P2 a D+ E# D7 o! O Z try {2 {8 z. P9 ^; @
modelActions.createActionTo$message
9 ?, ^. a' C* p, J (heat, new Selector (heat.getClass (), "stepRule", false));
6 d$ C7 {( ]4 \' H s4 M2 Z } catch (Exception e) {
" ], V- H x/ Y8 o( V8 z2 ^ System.err.println ("Exception stepRule: " + e.getMessage ());
& G |8 ^- @# ` }# N/ g. g: T9 X
8 w( o: \* P! |4 V try {
- `+ e5 M2 O0 p, g( C* N9 A Heatbug proto = (Heatbug) heatbugList.get (0);
% q3 W0 H. D, G8 Q) h" c# ]! v Selector sel = 9 X9 _/ _% v5 ?- V
new Selector (proto.getClass (), "heatbugStep", false);+ f# t) x/ |" i! d) L. e/ i
actionForEach =
: B h+ a) c+ y modelActions.createFActionForEachHomogeneous$call
, t' [5 J4 N: B (heatbugList,
! J3 m/ n7 c6 D, O new FCallImpl (this, proto, sel,, G1 t1 b8 c/ d5 v
new FArgumentsImpl (this, sel)));( O" D, S7 T K/ }+ R
} catch (Exception e) {! r6 W- R) p' ]9 {9 `5 C q* |& [
e.printStackTrace (System.err);
' M* R, d/ R' j2 Q% D; G }; D& O3 N, [& K1 a
( y! g! U& p4 k: f/ p7 W
syncUpdateOrder ();
8 |7 _# t+ }2 H. r; _* E/ I" v1 O9 F- Q) ~: {+ e
try {
2 Z7 w, F' Q( y modelActions.createActionTo$message
) [5 z& s' E/ Z$ G, G8 o (heat, new Selector (heat.getClass (), "updateLattice", false));0 ?6 t4 r. Q( Y4 Z
} catch (Exception e) {* d- m% i) L& v+ u
System.err.println("Exception updateLattice: " + e.getMessage ());
3 x" J9 v4 Z2 T8 X# I, U5 m0 ^ }; e% t: e C: l4 z
: p% P5 y" Z, `7 K% x3 x // Then we create a schedule that executes the
$ _3 q I; y/ D E // modelActions. modelActions is an ActionGroup, by itself it
- ]2 [$ O* ]7 P: k- ^1 `' y // has no notion of time. In order to have it executed in9 V( w" S, p9 o( R: m1 e
// time, we create a Schedule that says to use the
4 x6 @& J" N; e) S- r // modelActions ActionGroup at particular times. This
, Z* ^0 m/ ]8 c: k; B* Z" s& l // schedule has a repeat interval of 1, it will loop every
/ L% P6 k1 @' b7 Z% E* e // time step. The action is executed at time 0 relative to
' n _# s+ j% |' ^7 C& } // the beginning of the loop.
( l# v& x* y, n
' H+ B' v i* q+ A6 X // This is a simple schedule, with only one action that is
* F# L0 i, u% b( |) o' n // just repeated every time. See jmousetrap for more
2 i# d8 f& v" a4 Y: o) \' o // complicated schedules.
3 Q; N2 A% ^% o& h
) B7 f$ N0 k2 a% G modelSchedule = new ScheduleImpl (getZone (), 1);
2 k. [9 B$ Z3 Z# y! ^2 k# m modelSchedule.at$createAction (0, modelActions);
% O# X2 h0 |) D3 d* C6 {
( u; K5 u2 e- p. n# L return this;4 ?1 m" q2 q% f. h+ l$ |0 l* a4 K
} |