HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 k% @" Z! D& l: e8 n* v6 [% n$ ]6 c( r3 w% Q- ?! H
public Object buildActions () {% j- e" L8 d! N8 k3 d( V
super.buildActions();
" E0 r1 q0 k6 Y7 c" X- ? 0 |# A6 N7 ~; B8 p* s, z8 C
// Create the list of simulation actions. We put these in
" q; X. O' q# C5 Y // an action group, because we want these actions to be
) F% P- J3 U- B$ \9 [* F" } // executed in a specific order, but these steps should6 w1 q) ?" O* R4 {- g& @
// take no (simulated) time. The M(foo) means "The message( i t. g$ k/ c* r$ P
// called <foo>". You can send a message To a particular
4 H8 [1 }; {# ^1 I6 ?$ ` // object, or ForEach object in a collection.
" {2 F; [- y0 k1 d5 c1 H0 A
" A0 l! T9 v, Y! X9 S- @. s: K6 G // Note we update the heatspace in two phases: first run' d8 S: i! d, ]/ c
// diffusion, then run "updateWorld" to actually enact the% E. T- V0 i; ]" T
// changes the heatbugs have made. The ordering here is
8 d+ ^% m% V/ Z. m // significant!
* q: |0 e) X+ _1 S7 ? H( H0 l# p* i- D5 Y: n
// Note also, that with the additional
6 F6 ]: E' `* u; B+ ~6 c4 i6 G% I // `randomizeHeatbugUpdateOrder' Boolean flag we can U R, z9 r8 g# ?# ?! o
// randomize the order in which the bugs actually run
+ n4 b, q7 b: J* ~0 l7 |$ _ // their step rule. This has the effect of removing any
9 U" ^' `( }( S1 ^1 z5 T' _* [ // systematic bias in the iteration throught the heatbug7 T" e: F2 d/ o" _- V" d" F% V
// list from timestep to timestep( ~$ [9 \# w0 A2 G
/ s9 j/ s2 w9 |! c3 U3 i9 h
// By default, all `createActionForEach' modelActions have* x- w' j4 m' l. ^
// a default order of `Sequential', which means that the$ S" s% V0 n$ x
// order of iteration through the `heatbugList' will be
3 a6 Y- V; I0 Y: o, o' T // identical (assuming the list order is not changed
+ Y9 {" Z( l& J) C( u& B7 Q* C5 h4 J // indirectly by some other process).
- I, K; @; `" N) J$ z - f; Z5 m0 y9 i6 e% y
modelActions = new ActionGroupImpl (getZone ());
) o6 o& y1 [4 j. Y& O7 t
7 }6 [1 c( v2 R. Z( V& z) s" u try {
H* w$ C4 F+ [/ X modelActions.createActionTo$message0 P' d( s0 h' E3 R, V% }9 i
(heat, new Selector (heat.getClass (), "stepRule", false));( E3 f! W- z0 W/ l: O. f( b* Q
} catch (Exception e) {
4 G3 }, H% ~* V" [. M6 `2 |) P9 R; W2 { System.err.println ("Exception stepRule: " + e.getMessage ());5 m1 e1 q1 a" P
}1 r9 ^# Q& q- W$ P
: z; x9 o3 r; D/ ] try {* ^. w" }1 L; z. X0 V* e& a
Heatbug proto = (Heatbug) heatbugList.get (0);' S& `5 G* `6 I5 i) B$ N
Selector sel = 3 S* U" ^& I$ X1 Q; e, z
new Selector (proto.getClass (), "heatbugStep", false);- ?, _" v2 _9 H% h# v8 u, w9 Y
actionForEach =
$ ]! C# u( D+ \/ L: g- j modelActions.createFActionForEachHomogeneous$call3 q9 [3 y( l- F* O- m, r( a
(heatbugList,
7 ~% o6 b# t# T6 V" h7 d% l& M- y new FCallImpl (this, proto, sel,
! s0 U: O9 L: t new FArgumentsImpl (this, sel)));5 z" L0 ^% l. j5 f6 f! _+ J4 y$ j/ ~
} catch (Exception e) {
V' Q' j) X/ A e.printStackTrace (System.err);" q) |, n. |' w$ r) y
}
5 X8 N5 t6 U9 L# e# i! c " C6 n* \6 h% X
syncUpdateOrder ();0 _5 q- ]; w/ i0 ^) e! l( M
, Y( v1 N* ]/ j2 k. W; y- V
try {
: w: C* C( U6 {; K* r modelActions.createActionTo$message
# B( T! m5 ~- l8 K$ f" r* B (heat, new Selector (heat.getClass (), "updateLattice", false));. e# S" n O% @5 G6 e
} catch (Exception e) {, s+ E/ V) p1 d5 L% t
System.err.println("Exception updateLattice: " + e.getMessage ());
* O6 b0 ~) S4 Z t2 M- |8 j }* J% M) F* G! D7 U
8 o% U# V3 L% M( ` // Then we create a schedule that executes the6 e+ X6 ]$ `5 l& { n
// modelActions. modelActions is an ActionGroup, by itself it
% A4 G1 _9 L9 k+ O, x" y6 K // has no notion of time. In order to have it executed in
2 P2 X7 t1 K0 t4 ^( _ // time, we create a Schedule that says to use the
8 x0 @# r- b) G5 Q! w/ M // modelActions ActionGroup at particular times. This
4 o3 f- W3 [' ~4 Y // schedule has a repeat interval of 1, it will loop every) a7 S1 a" v4 n& |) G q
// time step. The action is executed at time 0 relative to
u7 T: U; J- G9 `9 C5 R8 d, l( R( B // the beginning of the loop.
( V- R2 X! Z, S l6 u2 a; H4 J# D( s5 w$ `5 p
// This is a simple schedule, with only one action that is' r0 m: x. ]1 k. H
// just repeated every time. See jmousetrap for more( Y4 {9 B* Y. f B4 |( c6 D- h" n
// complicated schedules.! `" f. T7 H3 ^+ h$ M% Y
2 W" Y- j9 O9 E; g; |! a modelSchedule = new ScheduleImpl (getZone (), 1);
0 r6 T ?4 G6 P d) W* O5 { modelSchedule.at$createAction (0, modelActions);
4 u* h4 H6 w' H
+ K; Z# i# L. Y4 K; Y \* N return this;* l: l% k8 f7 P6 X C
} |