HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 e5 p( Q3 {: U( {
% _+ J8 }- C; _% M3 [" E' U public Object buildActions () {
, G& S: H( P* s3 Z" B3 L( ?4 W super.buildActions();- a' @, |7 H: c9 L. D9 |+ ~3 i
% Y# z' [; D) ~ // Create the list of simulation actions. We put these in
% K& S2 x; x |" P5 Z7 d& k$ c+ R3 X6 W // an action group, because we want these actions to be4 ?# A" f7 O4 b: m' X- B
// executed in a specific order, but these steps should2 e: M/ U4 M" |' r* @4 I
// take no (simulated) time. The M(foo) means "The message* j" k8 t0 H' s$ [
// called <foo>". You can send a message To a particular
$ `6 v2 j$ R4 ~6 q // object, or ForEach object in a collection.
$ L) ^; H, |& K) ?3 g- m# T- b " x9 |7 [1 z- L& w
// Note we update the heatspace in two phases: first run/ y' F9 \7 W, A0 m' b) X
// diffusion, then run "updateWorld" to actually enact the$ y" Y' _( X" f
// changes the heatbugs have made. The ordering here is5 k5 J. f- e* p' w& W
// significant!
' C9 \$ \# ?# ]6 h4 j
" D2 R% L3 {: i) {$ E8 F0 l // Note also, that with the additional
& P; ]3 j+ b# w# N // `randomizeHeatbugUpdateOrder' Boolean flag we can3 _% Q/ _1 g; p$ g: f
// randomize the order in which the bugs actually run3 h" W6 ~% w7 i ~3 R' o r. E4 t
// their step rule. This has the effect of removing any
( b' g# ^( n; e1 m% Q // systematic bias in the iteration throught the heatbug7 W! I) p! S) N
// list from timestep to timestep! X6 @6 ]% E0 ~$ K4 I1 D0 Z
% j5 {- i; p: w& g // By default, all `createActionForEach' modelActions have
: w0 K7 G3 |" K: w* ^$ B" R // a default order of `Sequential', which means that the4 H" G. ~1 |$ _
// order of iteration through the `heatbugList' will be2 j7 S+ p( n0 _0 e% X5 A
// identical (assuming the list order is not changed
" }. _# W& C k5 q5 m // indirectly by some other process).
h; d1 H; }. p4 h $ r2 r: b. J. I; @% U1 p0 w
modelActions = new ActionGroupImpl (getZone ());, J$ _5 t+ v5 x6 v! b* m
4 r; M ^! y$ e' x ^! p$ p; s' i1 ~
try {, b5 z4 o! k4 C0 c/ |
modelActions.createActionTo$message
; a; d ^7 u1 _, a. D (heat, new Selector (heat.getClass (), "stepRule", false));
* U$ L( N( G# G N } catch (Exception e) {
4 T+ Z3 Y2 g. D4 J System.err.println ("Exception stepRule: " + e.getMessage ());
9 e) v8 @3 {1 {# T; U }
8 f+ \- w6 w, C: W
2 k, i5 v1 t2 N try {
3 b, @3 d4 U; m" T# E0 m Heatbug proto = (Heatbug) heatbugList.get (0);0 `: l/ ?7 I" p; Y( _; X" @! F
Selector sel = 6 q7 ^; I7 H A |- k$ p
new Selector (proto.getClass (), "heatbugStep", false);4 _- Y1 X3 T: A) w) P# v2 F
actionForEach =) M: C+ P7 E: m- Y
modelActions.createFActionForEachHomogeneous$call
& R8 H. I% N: r% D (heatbugList,
* ?; k$ w8 P, o- ` new FCallImpl (this, proto, sel,! E* A9 }. p# L& I5 i
new FArgumentsImpl (this, sel)));
! @1 K3 x Y7 u7 b% w- M } catch (Exception e) {/ Z* x( k3 R; j& }
e.printStackTrace (System.err);) N% y/ F6 b! a
}
0 u+ ?9 m3 l) C% V7 \" C/ I) F9 z , @9 v' t4 f& I
syncUpdateOrder ();
( j4 {9 [# f) o L# O1 x1 s
# E5 o* v6 I- i, S; E8 r try {2 r; s8 E. _' i1 C
modelActions.createActionTo$message + i$ n7 l2 t4 g# m. @! }
(heat, new Selector (heat.getClass (), "updateLattice", false));" o; D6 t4 V0 t2 }- o; L: L
} catch (Exception e) {
N( E( j" q' P+ a# @ System.err.println("Exception updateLattice: " + e.getMessage ());( e# v7 t3 H3 {
}5 m$ v, X8 v: Z0 v+ k5 Z
: }5 N B& n+ E7 j0 `$ w) u // Then we create a schedule that executes the9 x( P9 v' g( Y
// modelActions. modelActions is an ActionGroup, by itself it
7 y, B! k- U$ g" j3 P // has no notion of time. In order to have it executed in" U5 O& S; c9 l: G
// time, we create a Schedule that says to use the
: p6 _$ }% N8 G c+ @ // modelActions ActionGroup at particular times. This5 d% E( c) k/ |% H5 S1 N3 z; }
// schedule has a repeat interval of 1, it will loop every
* V& ?, V/ o, m5 Q4 U" n // time step. The action is executed at time 0 relative to2 G" e1 b3 w) f& n" n
// the beginning of the loop.
; H; Q/ @! R8 H2 g7 h% L, G" D7 w5 u$ m& Y9 c% x; o1 a
// This is a simple schedule, with only one action that is: o$ a+ |( a3 ~- d) l- ]6 q+ A
// just repeated every time. See jmousetrap for more
' u! E4 J& z; G) B // complicated schedules.2 m9 }6 e6 X: J% H" g- q7 \& {' I/ ~
5 C- @4 Z }7 A* b modelSchedule = new ScheduleImpl (getZone (), 1);
0 E% @1 a. [9 \7 q* o2 R- j4 ]: p modelSchedule.at$createAction (0, modelActions);' H( U% S9 N+ ?6 m0 H
4 n! ?; b: N; v- H8 r6 b' u
return this;
$ B' R! ~; u2 l1 z' J# _2 e7 K } |