HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 J. r4 r, w; ^8 D' @ w( Q. V. q1 Q" w% n
public Object buildActions () {
2 A0 G$ y8 I& U7 o) B n# K super.buildActions();
; o; B+ J# E! F' e4 h5 c9 t& m4 H % X5 t9 ?7 u; F; |: r
// Create the list of simulation actions. We put these in$ f- B7 L" N0 C9 ^9 @" u' R
// an action group, because we want these actions to be
2 d3 ]. Y" ~! s$ x7 g# h7 `7 D8 Q // executed in a specific order, but these steps should
X9 z8 W' _" c; ]5 Y4 j# _$ X // take no (simulated) time. The M(foo) means "The message9 h$ R; Q- s y4 g9 Y4 b
// called <foo>". You can send a message To a particular
$ [+ S: q. U' V5 c // object, or ForEach object in a collection.
0 ^3 z- m) x5 X" ~3 A* w / x+ a- ^% r3 J% {
// Note we update the heatspace in two phases: first run
) a2 u7 ?% j. w // diffusion, then run "updateWorld" to actually enact the& Z: Q1 L4 u7 _/ m* E
// changes the heatbugs have made. The ordering here is
' N0 [& t( Y& S9 M- Z' |3 N // significant!
9 D9 i5 ?) B. t) v( ?
" f- c, k) k s" C: | // Note also, that with the additional
( ?! k' q, H) r/ L* `% p // `randomizeHeatbugUpdateOrder' Boolean flag we can" E0 W* i# j4 A& f
// randomize the order in which the bugs actually run) B! P% D5 V: z
// their step rule. This has the effect of removing any, `, g/ u5 C) v0 {4 y
// systematic bias in the iteration throught the heatbug
, U- X/ T+ V5 ?& \$ i2 P // list from timestep to timestep
" O U5 J0 V8 K5 C% ~8 K & o: [ E+ n b2 k/ N
// By default, all `createActionForEach' modelActions have
6 [3 b9 y B( b' ^: s; O# b& J+ { // a default order of `Sequential', which means that the
# J X' f) Y R- F4 G# B6 |3 P // order of iteration through the `heatbugList' will be
( f4 R% X( h1 E, [ // identical (assuming the list order is not changed7 ^; _8 R* X5 v8 Z9 v
// indirectly by some other process)." \2 ~- _( Y: G
1 b! u! `. w- S5 S S$ d2 z, }
modelActions = new ActionGroupImpl (getZone ());7 x9 ~$ b3 {; o6 H
/ I. r" Q+ _8 t4 ~4 y
try {
! U0 c4 a# r- i: `8 P& Z4 U6 j modelActions.createActionTo$message
9 O7 L2 I, U) V (heat, new Selector (heat.getClass (), "stepRule", false));
1 P0 y2 H5 p) p/ S7 { } catch (Exception e) {! g( |$ n1 e+ r
System.err.println ("Exception stepRule: " + e.getMessage ());
- A7 s/ [0 N, ^" \ }
! P+ A5 Z2 i* V9 V$ q& A" K4 e4 R; H( p. r) q/ X: C* s( M
try {6 P" G/ P6 F( {0 w( p! l+ q
Heatbug proto = (Heatbug) heatbugList.get (0);' V* w8 i" z+ F3 N3 A1 \( k* m, u5 v" q" a
Selector sel =
: s4 I" ^' [/ T! U$ r+ s new Selector (proto.getClass (), "heatbugStep", false);4 E- A D" k% R3 ]6 Q" M* \
actionForEach =# R0 y u, n- @: J0 v& P
modelActions.createFActionForEachHomogeneous$call
* U1 z* l/ `) @ (heatbugList,, J6 R: }/ A' x/ r" c6 e# w
new FCallImpl (this, proto, sel,
' g( b4 i f2 u" S, ]' M: t new FArgumentsImpl (this, sel)));5 J( @$ X7 {% a" ~9 ?/ W
} catch (Exception e) {
) e7 W: i1 m) f) _, `9 ~* f e.printStackTrace (System.err);
3 ~! J5 r! ^" z4 G* F }" {& d6 K0 P6 S9 k* t
3 o/ u% _3 N$ \& S+ n& j
syncUpdateOrder ();
7 G3 `( S$ i2 c
9 u! f. u8 ^% w/ t7 X0 o E try {
: n2 p# M: I8 m O modelActions.createActionTo$message , c8 \7 t9 S( M% g
(heat, new Selector (heat.getClass (), "updateLattice", false));* L6 E& a, v* ]0 v/ F
} catch (Exception e) {
7 C* I: F% h) f0 x' G7 q- K% k System.err.println("Exception updateLattice: " + e.getMessage ());1 R0 _! w5 @8 \0 Q8 Q8 k
}
, _1 e. x. Y4 C, i! I . _* p3 D- G6 w0 R
// Then we create a schedule that executes the
) M( ^% W+ s1 u, f: G3 G // modelActions. modelActions is an ActionGroup, by itself it4 D9 p% H4 E% V* O" y
// has no notion of time. In order to have it executed in5 w4 m( a3 ~, |' {( m& p
// time, we create a Schedule that says to use the
+ i1 j; J" D; W- m2 n- l // modelActions ActionGroup at particular times. This
9 P, V& y- f1 \2 R. C // schedule has a repeat interval of 1, it will loop every$ i! M# t% L p1 P! a
// time step. The action is executed at time 0 relative to5 k8 {) a' G7 d3 x
// the beginning of the loop.; v# I0 S/ q4 e# v7 V# q6 s
: W, l5 W* d( N, h
// This is a simple schedule, with only one action that is
6 J5 O- M O0 J% M! C // just repeated every time. See jmousetrap for more$ b/ I2 {5 f& ]! R! Q$ c4 C
// complicated schedules.
( d% d2 `7 N& }2 V$ k8 Q
- x! W. f2 n! Y: {* }9 ]. \ modelSchedule = new ScheduleImpl (getZone (), 1);
+ `% g6 b. Y& i modelSchedule.at$createAction (0, modelActions);
6 x8 a* F' p/ I7 P. m! G: }
, F2 R( I& T) P. n return this;
& K+ |; Q2 c, X) d2 X+ f } |