HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- W7 i, m" s2 c3 K( n6 Q9 U$ }% I' d& O+ p; s1 J9 Q1 L
public Object buildActions () {
- J1 U- K1 e. u( K super.buildActions();
& Y+ R7 o# A* O) q3 o 3 Y7 K$ r3 }/ W& A/ \" C8 X
// Create the list of simulation actions. We put these in+ N: P; }0 o/ U7 S6 a( h( x6 A
// an action group, because we want these actions to be' W+ y0 Q8 n# d/ s* {* m
// executed in a specific order, but these steps should
( b7 q8 ?+ D! p/ T% s // take no (simulated) time. The M(foo) means "The message4 [( Q* ?2 I. V3 y3 D* `7 t: a6 @
// called <foo>". You can send a message To a particular! W- Y6 ]! ?9 h5 \" X
// object, or ForEach object in a collection.' ]; k# s& a! _1 M
: g5 y6 a/ D1 Y4 |, u+ X, @4 S
// Note we update the heatspace in two phases: first run: Q: G& C) x0 Y9 p1 |: N! _
// diffusion, then run "updateWorld" to actually enact the
6 P% s" {7 W8 O: ^/ k- A // changes the heatbugs have made. The ordering here is
5 q7 d A- l; X1 @: A6 _" N( V5 I // significant!9 j8 }/ Q3 m7 H* V
1 v( @+ F* ^* T& Z8 y6 v // Note also, that with the additional
2 ~5 K! G+ U. X+ I // `randomizeHeatbugUpdateOrder' Boolean flag we can$ D8 b( ]) ?/ }' }* x( l
// randomize the order in which the bugs actually run
' r" j1 Y6 ?* \ // their step rule. This has the effect of removing any
: o; x% p6 `; ?+ z" G7 [6 n // systematic bias in the iteration throught the heatbug2 i$ H. e! o0 [3 q1 M1 W0 x
// list from timestep to timestep
1 y$ ]! s2 n$ C p6 X- r
( n# l. ?6 l# M# s/ E // By default, all `createActionForEach' modelActions have
8 S9 Q: K0 |& ^8 q3 Q2 p a; A // a default order of `Sequential', which means that the
+ E) ~6 {) E' {7 @7 l // order of iteration through the `heatbugList' will be o, M6 l n v
// identical (assuming the list order is not changed
+ E5 ]8 n* K& Z* L& g) t- h // indirectly by some other process).4 E0 A4 R6 n5 t R$ h; R T T
* s$ ]% I7 n7 r5 L5 Y' ]$ v% a2 d modelActions = new ActionGroupImpl (getZone ());
$ l: P( x- R5 W3 T" G% N0 T$ X0 [' v' h. l' w! K0 E2 u+ t ^
try {
* Y- r, q' v5 u: N3 D modelActions.createActionTo$message
3 A2 S; _& W: B (heat, new Selector (heat.getClass (), "stepRule", false));
" K0 x' {5 G: g: E" u8 }& k } catch (Exception e) {
& B* r& b* w5 R2 b% l System.err.println ("Exception stepRule: " + e.getMessage ());+ h5 `4 M# z+ H3 m1 k' [# K
}
1 b& f5 s6 `& W( U6 ^0 O9 J2 ^2 @% s2 j- q& A) I7 m
try {
0 z4 c& R4 q h, T Heatbug proto = (Heatbug) heatbugList.get (0);, y/ \$ G" T V( b. X0 A
Selector sel = 8 G/ s: z% w3 F9 W# r& \' l- u
new Selector (proto.getClass (), "heatbugStep", false);0 t7 N- D) Y1 x! O' A# g$ _" m
actionForEach =/ f# H4 h; `# A# }, r1 ~( G
modelActions.createFActionForEachHomogeneous$call
7 f9 \' I$ H" B (heatbugList,
2 v6 L0 w! {5 b' s) T7 l new FCallImpl (this, proto, sel,) j- x7 Z0 |3 G h9 q% V
new FArgumentsImpl (this, sel)));# E, @2 ], r0 D; S) E
} catch (Exception e) {
9 P4 l6 ^! Z! f$ [) w e.printStackTrace (System.err);/ P7 c4 \8 t* ~ u0 z& A
}' C/ O% \0 w% z1 R! r
$ \; D8 a" |" X* w
syncUpdateOrder ();( ^- N# a: g8 q" s+ C. _
" Z9 V: c9 C& z. U v+ Y try {" S, k7 |! m) X3 Y9 i7 P% U* A
modelActions.createActionTo$message
6 C2 ^6 s! A: a, | (heat, new Selector (heat.getClass (), "updateLattice", false));
. q! J1 i* x1 h } catch (Exception e) {
" U' V9 T9 u7 G7 ~1 L System.err.println("Exception updateLattice: " + e.getMessage ());
& y; r1 v: R$ s6 P9 X2 }& Q }
$ J6 G3 m; _! c4 I) M0 \
6 n' w' `& |4 O // Then we create a schedule that executes the
7 x9 o0 v; Z, E6 Y( A M, s! _ // modelActions. modelActions is an ActionGroup, by itself it7 g* ~8 T2 v+ D
// has no notion of time. In order to have it executed in
. Z7 z% @! @- g0 m // time, we create a Schedule that says to use the# P) H- G% C; a% g: v) t. O
// modelActions ActionGroup at particular times. This$ N- s! O7 u1 O3 b; b( w; q
// schedule has a repeat interval of 1, it will loop every+ c1 u7 P6 k) l+ f }
// time step. The action is executed at time 0 relative to
5 y" f9 K+ M' O% W0 ~ // the beginning of the loop.
+ I( o9 R) m) a' b. t- G/ n1 \4 o4 V g) D8 J+ o! v# d2 W) l
// This is a simple schedule, with only one action that is
# \3 Y+ I: B! q, Z0 q2 J/ }! d // just repeated every time. See jmousetrap for more5 y" w2 j& q1 a4 p
// complicated schedules.. n& R* R' m7 V2 i2 @: B
" ^ K3 S3 x# r5 R8 J) |/ n @ modelSchedule = new ScheduleImpl (getZone (), 1);# z2 K. K ^9 h/ C5 q7 n6 k
modelSchedule.at$createAction (0, modelActions);
: `5 B6 E( A$ j / C) S& I& Y4 Y. H/ S; A/ W4 F
return this;
, n( H; H1 ^0 o) k } |