HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 f4 R2 Z/ ]5 x( j4 J4 L4 i) m- a! b
public Object buildActions () {5 j% X2 r' Q7 W
super.buildActions();, y. E F; S) o4 W2 }3 ~; u
. M0 h$ h* L- V; W
// Create the list of simulation actions. We put these in
, i* g8 H2 {+ U. b) _% d6 A // an action group, because we want these actions to be) u. q- T/ Q7 H1 n' {
// executed in a specific order, but these steps should
/ L* P$ f* U H3 ? // take no (simulated) time. The M(foo) means "The message0 _3 l1 W0 r( x
// called <foo>". You can send a message To a particular; C0 L2 r3 n, z+ }/ V A
// object, or ForEach object in a collection.
& S5 U6 h' u' O+ J8 n" I 7 A5 @- p1 Q# Q9 o' A
// Note we update the heatspace in two phases: first run
+ f4 F: J. f7 x! ` T$ ]% K/ { // diffusion, then run "updateWorld" to actually enact the
7 B& s$ A, s$ X5 r6 K // changes the heatbugs have made. The ordering here is4 _- C Y( H) t& A- c/ |! q! D; D
// significant!5 o8 z: }& t, n
+ a! y1 \ y. G5 J0 K
// Note also, that with the additional
% T: e4 X) U6 L7 w, ?+ z // `randomizeHeatbugUpdateOrder' Boolean flag we can7 |/ G8 R, T& V( ~: N
// randomize the order in which the bugs actually run; p1 Q' S( B8 f. G4 |# W
// their step rule. This has the effect of removing any
; @8 |4 M; D0 Y // systematic bias in the iteration throught the heatbug7 l; Y- z; L+ t0 U l: Q$ q: J+ A6 T
// list from timestep to timestep) _: U& |; h3 B1 n1 W. l, _
3 F+ `4 b7 C+ R+ s // By default, all `createActionForEach' modelActions have* C( `& X1 q& w( \
// a default order of `Sequential', which means that the
1 h9 a3 v( J( M // order of iteration through the `heatbugList' will be
- w0 a# r; G; f% t0 ~. | // identical (assuming the list order is not changed
* p5 d- u w. Z // indirectly by some other process).
# e: E! e; e0 n 8 S$ J8 ~' w. b! _, }& @ X8 X
modelActions = new ActionGroupImpl (getZone ()); \. t" j( k( `$ p* J
( v9 e" M3 E+ I/ b& ^3 O& d# }9 ], H
try {. B2 q8 d( i0 R* \
modelActions.createActionTo$message" V7 w8 c7 O7 M7 ]+ g8 h
(heat, new Selector (heat.getClass (), "stepRule", false));
/ ]% a& q6 I$ Q+ } } catch (Exception e) {
3 B: z$ M2 P. @0 z& Y; f System.err.println ("Exception stepRule: " + e.getMessage ());
8 U8 { e ~, e; S9 [* i3 d, D }: g: p4 Y9 l" a: e+ h2 s5 c* t4 N0 Q
* J A# o- O3 ]" X. o' t1 g try {
# p. t( h5 c' n( o* `. g Heatbug proto = (Heatbug) heatbugList.get (0);
" h1 C) s9 T& G1 Y+ ]( t' @ Selector sel =
: T! W" ~& ]# {1 ]; j; S" K new Selector (proto.getClass (), "heatbugStep", false);
# O' U% d" r2 P9 t7 Y+ Y8 y actionForEach =/ b% N9 A- `/ ]% I/ \7 B
modelActions.createFActionForEachHomogeneous$call2 j. a! r: ~- V" F1 E6 ~
(heatbugList,& q" A2 n( D. g7 ?3 n7 }
new FCallImpl (this, proto, sel,( _+ N( i- G- m) c( R4 A( v2 T
new FArgumentsImpl (this, sel)));
7 H/ g; j- L: S } catch (Exception e) {' H8 ~5 N$ T, g- T! Z& ?7 O: W! B
e.printStackTrace (System.err);
, s" X5 g/ u3 i; z+ p8 g }
) G t$ \# x# k" d5 r& ^4 j$ X' S+ h2 O
( N8 o/ |% ]- ^6 v" V% c syncUpdateOrder ();
. L/ c8 d' C/ u9 m+ O0 x% ~ r; _, J3 N
Y; p. _# g& c! g9 Z* C0 i try {
9 y: Z8 X3 Q% j5 s5 Z modelActions.createActionTo$message
: \ ]" D& ^' f2 Y6 R (heat, new Selector (heat.getClass (), "updateLattice", false));7 g% W) o7 \1 Q; P, S' A2 V
} catch (Exception e) {
5 v( Z7 p$ |/ B c" N System.err.println("Exception updateLattice: " + e.getMessage ());
; K, ^0 Z1 b! Y% s4 K$ h }
: K4 Z( g9 K) P( z 2 z% L8 r" ]$ h5 X1 d0 I! d
// Then we create a schedule that executes the
9 K/ a: P" z5 n. B // modelActions. modelActions is an ActionGroup, by itself it
7 C) R7 _! C1 j, f // has no notion of time. In order to have it executed in0 U3 V' {7 a! \
// time, we create a Schedule that says to use the
1 m: g) {& o+ U3 J3 D& D // modelActions ActionGroup at particular times. This
) g9 y3 q4 b) `. K // schedule has a repeat interval of 1, it will loop every( K5 Q$ B$ w1 R, |3 Y
// time step. The action is executed at time 0 relative to8 R' |9 ~* V0 i+ y' ~$ z& L* M
// the beginning of the loop.5 |3 j6 T& k$ q" ^: q
0 F6 i: U6 u3 M, F$ t5 E // This is a simple schedule, with only one action that is, S2 p- p y+ x3 C% f
// just repeated every time. See jmousetrap for more: G+ c: S) N" ]8 c4 w8 a2 q
// complicated schedules., c% p- ?' J' B4 C
* j: d/ `( l2 M, ^
modelSchedule = new ScheduleImpl (getZone (), 1);
7 Y8 s: N" i# }0 o- E3 \% y modelSchedule.at$createAction (0, modelActions);
9 S0 A( v6 I4 ~ E' \) h* h
9 U0 e) `: G! @0 A; `( h return this;( G2 |: z/ A) G. G" B" g2 n0 R
} |