HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 N" K2 y; B$ E
; g( T8 l; p, X% @ public Object buildActions () {/ [, X1 a9 P' U) D, l$ E
super.buildActions();
: B; T* l9 v& n7 P$ _, C" v, \9 m ' U/ c4 e/ |/ P+ z
// Create the list of simulation actions. We put these in
( y+ ~3 o' [: l // an action group, because we want these actions to be9 [' r6 o) A; n
// executed in a specific order, but these steps should0 [* J4 Y# u6 a' A8 n
// take no (simulated) time. The M(foo) means "The message6 K0 Z7 Q9 L* O6 ?; E& j
// called <foo>". You can send a message To a particular
" J+ H" m% L+ M8 _) [7 u // object, or ForEach object in a collection.
: q: s9 T( V( j* o6 J
# U E' g$ Q( ]) K) H // Note we update the heatspace in two phases: first run
/ U" r$ V5 B( ]0 G2 {; w // diffusion, then run "updateWorld" to actually enact the% d, H. r5 i7 R; X6 o; Y
// changes the heatbugs have made. The ordering here is
_2 L9 Y7 T) _! Z6 S4 R: P! x2 { // significant!4 t& c# t, E" K
6 A2 h% ~. V. ?, d* |; J // Note also, that with the additional, L% t0 F7 u d C- X- i: Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 N c; U1 o7 o& m6 k) p% p8 u // randomize the order in which the bugs actually run# H6 C7 j ]4 d1 H. N9 l, W
// their step rule. This has the effect of removing any
2 C7 ]' h% a( ~6 [4 J1 N) b // systematic bias in the iteration throught the heatbug
4 c! C$ i& L5 \1 a" o( C: _ // list from timestep to timestep# U1 O) V; n, T( ~* w1 U7 M4 [
+ h# v' Y ^3 u4 z# j+ ?
// By default, all `createActionForEach' modelActions have
/ |: _9 U1 z! S9 Z9 s% Y // a default order of `Sequential', which means that the6 ^1 M) z/ g# @: L
// order of iteration through the `heatbugList' will be9 X* Y0 a) N U4 L/ A# H
// identical (assuming the list order is not changed
! p2 A6 e) R; Z: D% j, } // indirectly by some other process).9 b) e0 P6 w& c( Y/ F
6 K$ F% N+ ~8 n modelActions = new ActionGroupImpl (getZone ());
- P9 m& E" d1 N, Q- e4 V8 S
. u& G1 ~+ [1 c+ l- z" C try {
0 O- O& {: c% ?: D modelActions.createActionTo$message1 p& C: |$ W$ T- R) M- C$ b/ l) Y- A) ^
(heat, new Selector (heat.getClass (), "stepRule", false));
& X' J5 J5 @! k } catch (Exception e) {
( {8 b" j9 G0 a7 _ System.err.println ("Exception stepRule: " + e.getMessage ());, [' @8 a% b& G. u$ i6 Y
}
# o' W2 `- v, [8 P0 {% q- ]" k/ y
, b( M( H. ]0 ], ? try {
& { C. x8 Y( P- B& h, U6 Q Heatbug proto = (Heatbug) heatbugList.get (0);
$ G+ _; b7 P/ |, i Selector sel = 2 A. }& _# I4 T2 m! v2 W! m
new Selector (proto.getClass (), "heatbugStep", false);" g9 @. I7 c( S! K" ?6 I( M
actionForEach =$ w; S% n& B* v& { B: ]
modelActions.createFActionForEachHomogeneous$call0 Q+ E, W2 P# I, H9 M/ q3 O" t
(heatbugList,
: r: `0 v0 _% R' f# b ? new FCallImpl (this, proto, sel,
8 R* d/ Q6 T) v* F; a/ g; J new FArgumentsImpl (this, sel)));
. ~3 i5 y3 z$ b4 u8 U } catch (Exception e) {
+ O7 c* \* c4 u) v U3 E e.printStackTrace (System.err);: y4 j( u; r' U5 d# U# q" C
}
! W/ @/ V' o: j7 _. Y8 b! ~
9 q' o. g" p. u3 \, c5 _9 l syncUpdateOrder ();
$ V& j! N, f4 K; b. Q3 R
$ Z* v; g7 e: X2 v4 _ try {
' l* N2 ^* ]( Y5 Y ]- X9 h0 ^ B modelActions.createActionTo$message
+ U) I# u2 _$ P% c& K; H (heat, new Selector (heat.getClass (), "updateLattice", false));
4 n- k. o# ]9 W1 e; t } catch (Exception e) {
# ]( @3 v* \ s {* ?& L System.err.println("Exception updateLattice: " + e.getMessage ());5 D; _) \; w# \. n$ i% f9 M8 A' Q
}6 L. ?0 l# h7 K0 h
, z2 ]0 W, J) D M3 m! W! P' d // Then we create a schedule that executes the4 S, ~5 `$ ]- q* ?; f8 U3 Q# e
// modelActions. modelActions is an ActionGroup, by itself it
$ Y7 Y* j! ]+ h) P; j // has no notion of time. In order to have it executed in. `! |- V1 Z* s0 a& \
// time, we create a Schedule that says to use the
( s* L/ a0 [! u, l$ m // modelActions ActionGroup at particular times. This5 C1 O; O0 N3 [: `$ B$ }
// schedule has a repeat interval of 1, it will loop every
# P- h( H9 \9 k" ?* o, F/ ^ // time step. The action is executed at time 0 relative to
% r) J1 i' `% u6 u% N // the beginning of the loop.
+ y+ L' J* i7 s& M9 w ^; T1 [8 q7 L0 Z3 y
// This is a simple schedule, with only one action that is
% L* U3 {1 c0 n) ^9 m# u // just repeated every time. See jmousetrap for more
+ s" Q# V! y- a' V9 ? // complicated schedules.
; j' X+ ~) w; H4 r& A; M# q 8 P. h/ `) t- v! z7 I2 T
modelSchedule = new ScheduleImpl (getZone (), 1);
0 W/ m* t3 k- u modelSchedule.at$createAction (0, modelActions);8 l7 w5 X/ _$ ?
) v9 j9 z) {; e. K( q& [
return this;; V3 P: j. {9 |8 z0 x' y
} |