HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 f/ i5 `; `' U: {, o
# ^& i! B2 A I6 X' N. M' t public Object buildActions () {
8 V' i3 z4 N' U super.buildActions();
V* x9 u: v% I5 K7 `. g* [' R
: f; H2 M( E2 E // Create the list of simulation actions. We put these in
1 ~- T: ]7 b* O // an action group, because we want these actions to be
) J/ F5 z5 D) I // executed in a specific order, but these steps should
. [0 f8 d. C7 P5 ^ // take no (simulated) time. The M(foo) means "The message$ r) O0 T. _; h4 u
// called <foo>". You can send a message To a particular* a* G9 U, z) _+ f' Y) E
// object, or ForEach object in a collection.% L. U' K. |; r! _1 c9 a B$ _
) q: [) N* u. w, q: C& U5 k
// Note we update the heatspace in two phases: first run
P4 ^0 I# b _" } // diffusion, then run "updateWorld" to actually enact the# |+ w% p! \0 k% z/ \
// changes the heatbugs have made. The ordering here is
7 ]* F' q0 H5 j6 t- V* f5 B // significant!
: J7 J+ Z1 J1 X( i+ v
% l X4 |5 r" Y% p9 o. E( i& E2 o // Note also, that with the additional; s( E& h" y, U0 T9 S y3 C# m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 C# z4 M3 P. ` // randomize the order in which the bugs actually run. U" U2 W0 c: J+ d* G2 x
// their step rule. This has the effect of removing any
" z* m9 m' a0 M- v // systematic bias in the iteration throught the heatbug: J! m9 t. B7 r
// list from timestep to timestep
2 q @5 E; I- K8 _4 S' W7 q8 p
0 f z$ \8 {1 W) V9 L // By default, all `createActionForEach' modelActions have
1 |3 t* r+ o' t+ F7 d( z: a% _ ~ // a default order of `Sequential', which means that the
' p9 E1 i, Z% [/ L. J: h // order of iteration through the `heatbugList' will be& @- A5 u( M' G6 i5 X
// identical (assuming the list order is not changed9 E" ~7 o7 [. `2 ]5 b5 q
// indirectly by some other process).
5 X1 f. M, @0 z( Z$ m 1 w4 Z( U2 m( Y; S& s
modelActions = new ActionGroupImpl (getZone ());
4 T5 `) b7 f# \, U6 q- m9 F( W9 n! N
try {
" p- e9 I7 L9 k modelActions.createActionTo$message0 Q5 j9 k" s) `& W4 r A
(heat, new Selector (heat.getClass (), "stepRule", false));8 V \- b) R# Y% c+ d$ h. M5 }
} catch (Exception e) {
& O0 j. Z) V, u System.err.println ("Exception stepRule: " + e.getMessage ());
0 E3 w/ r) T9 N9 ~+ g }/ x- n4 R o* x4 ^+ U
0 d+ ]) P# }/ |! O0 G- X3 r
try {
) Z+ y3 x5 \0 ^8 a* _0 P' T! M Heatbug proto = (Heatbug) heatbugList.get (0);" r0 z+ H9 ]. S1 u6 L. ?$ n; ?, Y6 r
Selector sel =
* n! c, X0 d5 I7 _& p, x4 v+ O new Selector (proto.getClass (), "heatbugStep", false);- o# R4 }4 p& G2 P! I% \
actionForEach =% G' C6 H+ ~5 `) u
modelActions.createFActionForEachHomogeneous$call
( \8 Q0 L' q" b5 G2 t+ Z3 N (heatbugList,8 @- D" k1 x* B5 y5 `+ c1 ~
new FCallImpl (this, proto, sel,( A$ j* m* ~5 ~/ Q, K' R. O: {
new FArgumentsImpl (this, sel)));/ o0 l) O6 p6 _0 {( }* v
} catch (Exception e) {) U7 S, H3 F! o- f. q# T8 s" I
e.printStackTrace (System.err);# u6 c- D* b3 f+ O
}+ n* p9 T( ^& T
+ u* {: H7 e+ ~6 L# ^% H; L
syncUpdateOrder ();: p4 G1 R7 g8 ~
, [( T: T3 g' R$ Z+ W( _7 M try {
* {! n/ y1 B, O1 k- O7 @+ A modelActions.createActionTo$message
! ?9 w7 g* s# b8 F. M1 v (heat, new Selector (heat.getClass (), "updateLattice", false));
7 k' n/ R! \2 e7 v$ y8 l } catch (Exception e) {. r2 N! H. X7 \
System.err.println("Exception updateLattice: " + e.getMessage ());
7 s6 C3 Y* P! d& ] }
% P7 ~! b7 w2 o2 M, W
+ ~6 b; H3 J8 q' H9 _ // Then we create a schedule that executes the
' W: Z+ [6 S; e1 \ // modelActions. modelActions is an ActionGroup, by itself it
& o! d) i1 Y9 [: J! `" K // has no notion of time. In order to have it executed in
) u. y$ E; z( J1 ^8 B6 n# s // time, we create a Schedule that says to use the2 a' w4 c7 [/ X' `& l
// modelActions ActionGroup at particular times. This% _# b2 O4 w0 @
// schedule has a repeat interval of 1, it will loop every( S& ]' R+ E' h `' ^
// time step. The action is executed at time 0 relative to
* n D% ?( a" w; R* s // the beginning of the loop.
* ?4 b5 F' S" n4 x4 x
5 }: b E& V& v; J/ } // This is a simple schedule, with only one action that is
0 Q; O/ }9 ]8 \7 x5 v6 N2 h // just repeated every time. See jmousetrap for more9 T# x0 Z7 ?" a
// complicated schedules.
% T5 q: [: O' A1 u0 m0 D
0 X+ e. R$ v% z6 F, v" ^ modelSchedule = new ScheduleImpl (getZone (), 1);
" C5 Q% ^2 M& m1 y, V$ U modelSchedule.at$createAction (0, modelActions);
+ y) A" w3 V6 ]5 y3 }
$ a: i' g8 X$ K5 f+ y+ a return this;. d' L- z$ T9 h& ]' n
} |