HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! ^- C8 L* \* Y, J. H; y/ Q7 U1 ]/ _- A. m: P) I, }
public Object buildActions () {' T w2 Q) {5 v1 d
super.buildActions();
' Q7 a$ W9 E( C$ Z- V, i 1 j. l' D: {% k4 t# L0 c
// Create the list of simulation actions. We put these in8 _# k& A6 Z7 w) E
// an action group, because we want these actions to be6 v2 O7 u+ ^7 n0 ^% Z: u
// executed in a specific order, but these steps should4 {% H( q1 T: ]; P6 \1 `" V
// take no (simulated) time. The M(foo) means "The message. s5 \/ |! S0 ^3 l+ U6 ]: x
// called <foo>". You can send a message To a particular- I( c% g0 X3 S8 T3 r9 H& y
// object, or ForEach object in a collection.; g/ `0 v/ s0 M' U: K+ c
6 h& g0 A9 s' |8 N // Note we update the heatspace in two phases: first run% o: G; d0 v% c% T
// diffusion, then run "updateWorld" to actually enact the
- K" Q$ B4 d# F, { // changes the heatbugs have made. The ordering here is. P$ ^# }) o1 M p
// significant!1 n {$ f" R6 Q; o# U5 s& {( O3 h
1 G2 |% w% ^% m4 }+ T // Note also, that with the additional
" m4 r9 c6 \. A. w/ C, ~# k // `randomizeHeatbugUpdateOrder' Boolean flag we can
' s- M. b- w$ ~& ^2 d3 w // randomize the order in which the bugs actually run
+ i2 c/ v# L, ?, Y // their step rule. This has the effect of removing any# ?: y- [- L8 V
// systematic bias in the iteration throught the heatbug
0 R, a, `/ c5 S# G! I( A // list from timestep to timestep
8 o# t) Q# Z( U' X- {1 ?& s% g , q. l, \+ |9 O6 |! w) |4 m7 T6 [
// By default, all `createActionForEach' modelActions have- Q7 E4 _/ E, j
// a default order of `Sequential', which means that the
3 _7 ?4 A* t L // order of iteration through the `heatbugList' will be
" j6 l5 B: `% q* U! g5 ~ // identical (assuming the list order is not changed
) t/ O7 Z+ s3 q- Z4 B: M- H // indirectly by some other process).9 J1 _$ R3 r3 }( T+ N3 [4 U
& [' v5 h4 R9 n2 |6 D modelActions = new ActionGroupImpl (getZone ());
( k0 ?4 ~" Z2 o0 G) m( D& X/ e- q
try {# w0 @- u+ t" c" x9 Y
modelActions.createActionTo$message. q# I, ?* ?# J0 R
(heat, new Selector (heat.getClass (), "stepRule", false));) g/ C0 m' q, @# l& W3 j' M
} catch (Exception e) {
. F, E \/ W. j2 R System.err.println ("Exception stepRule: " + e.getMessage ());3 T& L+ l! s8 H. z/ M' c
}1 O; H) J, c1 R( U, L
7 y- e7 L7 _! S9 p/ A9 ^, _
try {! V. Z3 H, M' \- u
Heatbug proto = (Heatbug) heatbugList.get (0);4 I& J# B+ Z- b; S: l
Selector sel = 4 C) \3 }& e, F" c
new Selector (proto.getClass (), "heatbugStep", false);+ Z9 A- {3 J1 E; z. M, s; J
actionForEach =: S7 D e* ~( B$ _" M7 K9 L
modelActions.createFActionForEachHomogeneous$call
- Y. ~" v: B$ K; {: s; ] (heatbugList,
' C. J8 J2 ], Q/ P/ q new FCallImpl (this, proto, sel,! y* h* _; T; I- k
new FArgumentsImpl (this, sel)));
6 b6 ~, @. w6 }7 T( g+ C } catch (Exception e) {
3 u, v- T9 b7 c1 I2 T2 x e.printStackTrace (System.err);
" ^. L* t3 A! u4 G }
. F- V( n' ~, N 7 X& ^3 h' Q5 z
syncUpdateOrder ();
4 e E/ D' ?9 Y: R# V! ^: O0 w- e4 M- I1 p
try {0 l. I5 z: Z5 B7 X- Y" n: t' i
modelActions.createActionTo$message ) N0 u* |2 O5 F1 o' i1 {
(heat, new Selector (heat.getClass (), "updateLattice", false));# s5 B. T7 s- O
} catch (Exception e) {, N! r x1 M' d: X6 Y
System.err.println("Exception updateLattice: " + e.getMessage ());
% ] ]4 M) _% p( R O" ~# U }! I# T0 d5 y2 S/ ^8 m# s( j* L2 ~
1 s+ r8 S1 G x4 a* ~0 o* o // Then we create a schedule that executes the
( b1 ?* |+ C" D! N // modelActions. modelActions is an ActionGroup, by itself it: F) C( u# Z% [+ ?# b
// has no notion of time. In order to have it executed in D( y, s7 c @1 A/ [' e9 L# V" h
// time, we create a Schedule that says to use the
5 D, Q6 N( G- O' B9 r" ?. F, l0 t // modelActions ActionGroup at particular times. This
5 d7 p4 p/ K# ^ // schedule has a repeat interval of 1, it will loop every
# Y- e6 \+ c; k* Z% ^! [ // time step. The action is executed at time 0 relative to
" ?/ }; V _$ j, f // the beginning of the loop./ A, G; H1 v7 n; R. Q9 S
- T; p/ v! V$ `' r2 K
// This is a simple schedule, with only one action that is
7 ^5 H: d; z& J% `8 H // just repeated every time. See jmousetrap for more
+ o3 w& j/ `$ ` // complicated schedules.4 z8 k# ~9 I- \$ ?# e/ K* Y
3 ^' }8 W6 v$ n" H) R! u) } modelSchedule = new ScheduleImpl (getZone (), 1);
- \6 W' i8 p7 k0 @$ j: t+ a4 e) f4 r modelSchedule.at$createAction (0, modelActions);
; G) z$ C, N: i0 Z4 r R
: Z( S8 \ M' b1 G7 S return this;( P- W, |$ B1 t; ]- j4 P9 C' Q
} |