HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: a. k+ E3 Q( V! m, [8 S% F9 E2 w' D/ Y
a5 }$ x7 T2 K public Object buildActions () {8 G: e9 I: X/ g8 T; N, M
super.buildActions();
1 [ A y" H/ G4 p! _, o
1 P8 u% S- |+ o4 {8 H( T // Create the list of simulation actions. We put these in
* i" P% @5 [+ Z5 d4 b // an action group, because we want these actions to be
) j( W- j! t. p0 E$ c& ^2 w! B- f6 j // executed in a specific order, but these steps should4 v. c' Z' X6 n) H5 b
// take no (simulated) time. The M(foo) means "The message7 e) h; ]& t7 X! }& z
// called <foo>". You can send a message To a particular: `$ y( q) h& q6 `& [
// object, or ForEach object in a collection.
1 L! S% l! H5 b! n2 I 6 D, ]* x: B0 P
// Note we update the heatspace in two phases: first run. N1 L7 l5 Q2 w) t. }8 l7 i$ H: `
// diffusion, then run "updateWorld" to actually enact the
; K# K! I8 h; J X // changes the heatbugs have made. The ordering here is w& }: O! O/ l$ Z) m, C$ f
// significant!( D9 W; P, r( _5 K1 f% o; p
2 S+ O! l0 ?% M% H+ k5 X$ K: U2 w
// Note also, that with the additional
; g$ ~3 Z9 q) ?9 E2 k8 X! { // `randomizeHeatbugUpdateOrder' Boolean flag we can; T- H3 z% [1 Q6 `9 g# u+ p
// randomize the order in which the bugs actually run
- R4 r7 e! ^4 ^4 G9 |' G // their step rule. This has the effect of removing any4 u3 l+ k. |5 J5 K6 k
// systematic bias in the iteration throught the heatbug
* ?4 H* v0 L g' e, V% @& h# f // list from timestep to timestep" y. T/ n3 z5 W! m1 i* o
; U2 ^! S* I+ M3 G; @2 T // By default, all `createActionForEach' modelActions have0 [& Q' H& x# k
// a default order of `Sequential', which means that the0 m3 \4 ~, G5 [1 S4 ~, `
// order of iteration through the `heatbugList' will be( _9 P2 x+ U3 j+ W4 `* n
// identical (assuming the list order is not changed
" Q! x! k7 F2 \; }; u. S9 K- H( I // indirectly by some other process)., F; J" x! t8 Q7 @
7 J2 q" p T1 f( i$ Y. [
modelActions = new ActionGroupImpl (getZone ());0 w* U/ h6 x& Z s8 i) g
8 L1 Z1 a$ s" m$ _6 E try {
3 [3 U0 ^9 p+ F: w" F8 w. x$ G modelActions.createActionTo$message
+ V& d* ]) h# t+ z6 P (heat, new Selector (heat.getClass (), "stepRule", false));
$ C% b0 b! P5 Y1 C } catch (Exception e) {
/ I! p9 x" q$ H5 M: \5 y System.err.println ("Exception stepRule: " + e.getMessage ());" a0 M) m$ V$ Z* l- B7 x
}1 u, m+ t8 M# @+ ^
. C/ f( s1 T$ k1 O
try {. ?, p2 J5 G/ U7 ?, N( S1 z
Heatbug proto = (Heatbug) heatbugList.get (0);
+ H# z' U. M+ I0 J Selector sel = 5 A& G+ V$ _3 k7 K" m
new Selector (proto.getClass (), "heatbugStep", false);
# T, A# ~9 ~+ l) A4 I2 Z E# Q6 d actionForEach =, s$ C, |, c. E u9 Z4 M
modelActions.createFActionForEachHomogeneous$call; L. P8 E- X; P
(heatbugList,
1 k8 g4 x2 ~8 n4 X+ n9 L' q new FCallImpl (this, proto, sel,5 K1 E V, J R% A, l% p) X
new FArgumentsImpl (this, sel)));: g/ Q( C( H9 E; t7 x
} catch (Exception e) {
( g) o! W. T+ o0 x, T e.printStackTrace (System.err);" K! }) @5 i W _* h0 J- f
}, k4 C! d9 A: D! F6 E+ I7 Z* L! D
; l# F2 J3 s1 v3 x. ^2 { syncUpdateOrder ();" g9 _' u6 V9 h: Z4 r$ H; q
* A3 X4 y; p2 F4 S& j1 |$ [ | try {0 H4 z M. T) i7 f- T
modelActions.createActionTo$message
- Z) O. I) Y" k (heat, new Selector (heat.getClass (), "updateLattice", false));8 B) n; I; j% t. y. G/ I3 x# D
} catch (Exception e) {
1 b# v" h* }- E System.err.println("Exception updateLattice: " + e.getMessage ());) S' o7 ~5 t- i! B5 H- G
}! n4 J/ i6 j0 K e( C
6 s' Z5 ]2 T, M" D, [5 C5 z$ x* ?
// Then we create a schedule that executes the6 \- v9 i+ w1 d6 }% D9 p+ a
// modelActions. modelActions is an ActionGroup, by itself it
: q$ X4 b2 p6 V4 p4 ?/ K7 ` // has no notion of time. In order to have it executed in& G2 a& ]; |' ]1 T% t
// time, we create a Schedule that says to use the
4 X( o* G4 g7 \4 n // modelActions ActionGroup at particular times. This4 f! Z8 l( @: v% q' ]1 Q
// schedule has a repeat interval of 1, it will loop every& t/ t$ [; R# y+ x. P
// time step. The action is executed at time 0 relative to
- w) u7 n2 ?& S3 u3 \" b/ a // the beginning of the loop.- I- V' M% r6 M# B3 X
6 _7 s c. u' [0 ? K5 r6 \/ x; ?
// This is a simple schedule, with only one action that is0 W' s! L& C% I5 q: Q- g0 F4 [
// just repeated every time. See jmousetrap for more; y: _9 E8 @- z T3 i& h
// complicated schedules.
! e- u: q4 u% F1 c' ^, l . l' p: G9 a9 f; R
modelSchedule = new ScheduleImpl (getZone (), 1);" e5 k+ K( k( y: [
modelSchedule.at$createAction (0, modelActions);
6 ^* I. h0 y# \ {+ p
; ]: E8 O& b5 W1 Q: h5 J return this;
n4 u' u+ K4 W4 L# n6 O } |