HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 z) ?+ C+ M( S7 @1 r- F S3 f6 C* h# ]5 S% M+ t
public Object buildActions () {
6 z: M, u+ b& i/ Q9 ~ super.buildActions();
7 x9 _0 q( O# g. y, B
& f; J7 |, R1 V3 [# Y // Create the list of simulation actions. We put these in
, C, V6 a; `& m- n `' o // an action group, because we want these actions to be
- w7 G3 p" s8 w: e // executed in a specific order, but these steps should
) v( v. T( r) |) c2 |/ g; A4 t // take no (simulated) time. The M(foo) means "The message
& A: f( Q: C& T, [8 e // called <foo>". You can send a message To a particular
/ s- T3 x* P* _ // object, or ForEach object in a collection.3 P- z" ?4 p; v& A
/ n* {* Y, _# S1 V2 C2 n& Y
// Note we update the heatspace in two phases: first run# @2 Y; c9 g1 d9 e( F
// diffusion, then run "updateWorld" to actually enact the
9 L; L$ y5 D8 z" F+ N6 L* h // changes the heatbugs have made. The ordering here is' ^1 X# i" J" m4 F1 L
// significant!
9 q0 j8 o, _! Q6 A9 d( n4 y ! `1 }( R$ O# W [- t$ |4 l
// Note also, that with the additional5 U/ w3 d; z d5 L t8 v" u
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ i7 `' S/ z5 m! o) T/ |
// randomize the order in which the bugs actually run
( \: Y/ a3 ^9 `8 s" h // their step rule. This has the effect of removing any
* M. F: f' H1 ^% P" {9 Y6 ^7 `' c // systematic bias in the iteration throught the heatbug
$ ]! m3 v. A8 d& `# n1 F7 i7 w: w // list from timestep to timestep* F/ G$ i. Z! @6 Q
! A5 f1 o% Q6 X8 A
// By default, all `createActionForEach' modelActions have
# s8 O9 m! ~+ p% U // a default order of `Sequential', which means that the
: r, c6 e4 H$ i$ I) f' V3 O // order of iteration through the `heatbugList' will be
% K* R/ x1 A. A: O- y4 F // identical (assuming the list order is not changed% t3 k! I; |% i u; s, j* r+ d' F
// indirectly by some other process).( l9 ]( \9 u2 @7 t
+ Z( Y, t+ S$ ?- _# Y
modelActions = new ActionGroupImpl (getZone ());/ ^3 ]+ j0 k" v$ [5 g
! v* t1 s9 c+ y/ g" E& h5 f try {
) G/ z& `( c, A3 N4 x8 X modelActions.createActionTo$message
/ f9 ~6 e0 C; ^* |; _+ W( t (heat, new Selector (heat.getClass (), "stepRule", false));4 @, s# Y D6 h8 Y7 n
} catch (Exception e) {/ K$ t2 H% k! U" J0 o* L
System.err.println ("Exception stepRule: " + e.getMessage ());
1 k7 R r. _' R% ]0 M/ J }% t7 P _ C; X4 ]9 l
4 X# W1 w/ B% { try {+ m' Y6 t' ?/ O J( C7 Z
Heatbug proto = (Heatbug) heatbugList.get (0);7 Q! [- R1 ^8 A7 i; @
Selector sel =
2 n& [4 \5 t9 `1 u new Selector (proto.getClass (), "heatbugStep", false);2 C: X4 [( K5 `* \) N2 K
actionForEach =
9 Q) w5 x# ~% a$ L0 P modelActions.createFActionForEachHomogeneous$call
8 V% x$ z# Q7 d& |& F: } (heatbugList,$ i$ Q% \! z/ [& O* h$ u
new FCallImpl (this, proto, sel,2 |" `$ |! q7 A; [) |/ W3 R
new FArgumentsImpl (this, sel)));& J) r: }9 y. h/ x' A3 [3 Q9 q3 b
} catch (Exception e) {
" ?0 h& s" ~ t% r A8 L! \ e.printStackTrace (System.err);- H* Z6 j9 T" M3 M3 X8 ?( D
}- D- |$ w& n) o3 b. a( h! z
4 x. L5 t: B& t! q) Y7 @
syncUpdateOrder ();
( l. m% e, ~3 O; M2 @
1 L# G3 L0 X/ M* T6 Z# D try {
: \5 A+ Q6 R( o# F5 ? modelActions.createActionTo$message
# l2 p% \3 J) i7 n! x (heat, new Selector (heat.getClass (), "updateLattice", false));
) M$ C @# a* f/ h- E7 d7 U3 e) O } catch (Exception e) {- o/ e& }: U" i- h7 D5 d0 \) h
System.err.println("Exception updateLattice: " + e.getMessage ());
/ {$ H! ^; W0 Z! ] }% B8 Y6 K6 a0 [- L
0 X( t: h: `' G1 s& k$ W* P
// Then we create a schedule that executes the+ a7 _# G9 M/ [ a9 k3 H5 L4 j, T
// modelActions. modelActions is an ActionGroup, by itself it
3 M0 n1 A, ?0 }7 Q* C) l5 V // has no notion of time. In order to have it executed in9 q' Y/ i1 |7 E% T F
// time, we create a Schedule that says to use the) s% k3 }' ^7 W
// modelActions ActionGroup at particular times. This8 s" C5 H% O$ W$ j; g' l
// schedule has a repeat interval of 1, it will loop every6 r% }" `$ \2 I( j E7 o( l
// time step. The action is executed at time 0 relative to
- s, Y4 j/ b( b- m5 a2 J2 L // the beginning of the loop.
# I: o8 T/ M7 f; }2 M% z
4 m6 }! c& R3 d2 S! y // This is a simple schedule, with only one action that is
& m( j- v$ ]: K( ]: m // just repeated every time. See jmousetrap for more1 W' [, S- ?* |9 }- x+ T- e+ Q
// complicated schedules.
2 Y. i+ B. n' m4 v
5 b* `& T: f0 \% ^ modelSchedule = new ScheduleImpl (getZone (), 1);6 |/ {/ q$ K% s& i0 R% d3 Q) d f
modelSchedule.at$createAction (0, modelActions);+ w# S" L# h( r, O# ^% D, I
9 W, x0 z, W8 s+ g return this;$ m' H8 y( R* V' l7 O$ K* c. N
} |