HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ X U. O8 j: \4 o, Y3 |! R
% W; H, B! g" X+ A
public Object buildActions () {" P5 s+ F$ @1 D# b5 K
super.buildActions();
) i; N0 i- r* L% ~3 P / \) H+ r$ R; `5 d' i# B# v3 T- w
// Create the list of simulation actions. We put these in
! p9 b$ Y% q3 Z& i: l7 k3 B // an action group, because we want these actions to be
& _3 u2 E6 c! q$ @ // executed in a specific order, but these steps should
$ O2 s" ?" r7 e% O // take no (simulated) time. The M(foo) means "The message
, {: E, c& ^: W# R7 c4 C7 t // called <foo>". You can send a message To a particular
2 C1 t, T! k b. ]9 \ // object, or ForEach object in a collection.
9 x" t) ~* W6 \ i- Q0 Q8 [) Y2 l( g$ M) t
// Note we update the heatspace in two phases: first run
& W: N4 v+ C: n- I // diffusion, then run "updateWorld" to actually enact the
1 n7 z% {' F8 O; ^ // changes the heatbugs have made. The ordering here is
& w$ C- c" X. h$ P; o! }9 N9 ^9 L // significant!% r# q1 A6 ]! D3 Y& i
9 V# `0 X( u& n; O& v( ~) c
// Note also, that with the additional
# \* h/ c$ p2 D& D1 Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 _$ p" V- [9 X; Z! `) y! x // randomize the order in which the bugs actually run
6 s; X$ i+ z; W& e! z6 A // their step rule. This has the effect of removing any
% x' R- m# ]4 D! Q7 O' E8 D // systematic bias in the iteration throught the heatbug7 A- V5 ~8 T% P% U
// list from timestep to timestep
+ q* T1 [7 D) Q' g! A- h& N+ R 6 \/ _# C C; Y7 F" B# b
// By default, all `createActionForEach' modelActions have
; `: k" j/ s( B+ F* M4 q& A // a default order of `Sequential', which means that the
. z) M1 M$ p$ c, Q- }$ s // order of iteration through the `heatbugList' will be& R" s$ N' U- h4 e
// identical (assuming the list order is not changed
3 p& j+ u0 g; |# o# U+ b. p( S" ` // indirectly by some other process).8 O% ~- d2 E5 K* \+ S; X0 e
. r/ x0 h! B( J! z- |1 _ modelActions = new ActionGroupImpl (getZone ());
" U3 |( i2 f1 `' G2 ?4 V1 u# U+ o5 l# P1 F+ o }
try {* ~5 T6 j) W3 N4 ^% L
modelActions.createActionTo$message# \ ~$ n( W: {; W4 w
(heat, new Selector (heat.getClass (), "stepRule", false));
; y6 `$ V Y9 ?( l2 n; ~" d } catch (Exception e) {
7 b0 @) ?# x. G& L System.err.println ("Exception stepRule: " + e.getMessage ());) C+ V. {5 |- \! D, p
}5 E( e6 L( \6 R( W+ E! A
5 ~ ]/ E0 [# e6 p+ r: R& v
try {
: ~, u0 i0 f" f0 X' o8 J& \6 z Heatbug proto = (Heatbug) heatbugList.get (0);
& H I& }+ Q2 R- V1 z; C Selector sel =
0 Z" W [% E; z# o new Selector (proto.getClass (), "heatbugStep", false);
0 |! @7 K# h# i' M% G actionForEach =
6 s: Y( y0 R4 ^) p3 q* N | modelActions.createFActionForEachHomogeneous$call
0 h; c4 i) k* c! g (heatbugList,) D1 A# Y3 Z/ U
new FCallImpl (this, proto, sel,
8 |' ]3 V2 {+ k# O; y9 }- o new FArgumentsImpl (this, sel)));* I1 w1 p4 B, I( Y( V
} catch (Exception e) {
( u" R' L: ~4 M9 |6 b* q e.printStackTrace (System.err);
. S+ T) C4 {8 q$ }5 u M: Q( k }
/ ]+ Z8 y- v" j- s* c , v7 P5 H. R4 S7 x
syncUpdateOrder ();( k0 p. |& `$ Q5 Y# e
! D" E& B$ c; h! d; D try {' I1 H' N$ T) R C1 [
modelActions.createActionTo$message
* H! G6 M# ~5 `3 g/ @ (heat, new Selector (heat.getClass (), "updateLattice", false));
* X2 p4 J B: Y4 | } catch (Exception e) {/ N" Q6 U% _2 g2 N; V6 q) C
System.err.println("Exception updateLattice: " + e.getMessage ());
, S$ S9 p/ e7 m }
+ i+ |) F* f$ i) U' X ! r+ [0 f, W Z5 y( f) z! K
// Then we create a schedule that executes the
* p0 j q: }; W // modelActions. modelActions is an ActionGroup, by itself it
1 S' i% _: g* X4 O* e // has no notion of time. In order to have it executed in
6 j6 |4 w( i! `. | // time, we create a Schedule that says to use the5 f' d1 p/ q* Q$ v( J6 `" T
// modelActions ActionGroup at particular times. This4 w3 H; ^4 c' \6 c% T/ U
// schedule has a repeat interval of 1, it will loop every3 y9 C1 A6 M e/ \
// time step. The action is executed at time 0 relative to
1 o+ T* Q4 q( W3 L // the beginning of the loop.
+ n( v1 X0 _9 m" }
$ z0 P5 y$ x- U' w' U# i: u // This is a simple schedule, with only one action that is& H+ m/ a( W1 k) x2 u8 E+ p
// just repeated every time. See jmousetrap for more- {) k8 z' C. L
// complicated schedules.8 t" W" h8 r. J1 q
' v' ?& I/ C, U, m' T: Y0 ~
modelSchedule = new ScheduleImpl (getZone (), 1);- @$ w3 J1 y& X+ {3 U& d
modelSchedule.at$createAction (0, modelActions);' m$ r& Y+ I+ k$ |+ i% I
9 {* w4 ]2 Z% r5 ? return this;
8 s* V% O6 K2 n" O5 m } |