HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ S2 k5 E( m+ J" b7 J
' b; H9 R7 f, ?, | t( e9 W public Object buildActions () {
2 [1 g0 t7 ^+ Q4 x5 y! V8 y7 p8 ] super.buildActions();
9 \1 }1 S3 Z) V* @9 y6 R/ \- N 4 r# a7 k4 W1 I: X% L$ F
// Create the list of simulation actions. We put these in
( |) a0 I1 i! I- K // an action group, because we want these actions to be6 [ R, o) J1 f, { T
// executed in a specific order, but these steps should
4 R& `) w2 _/ O6 ?$ a // take no (simulated) time. The M(foo) means "The message: s* ^. \) v( W# l, E
// called <foo>". You can send a message To a particular8 R% b1 y; u" U1 F3 L4 K
// object, or ForEach object in a collection.
8 h8 F4 M, T0 k0 J/ }7 n
& q- E- E- j7 a' v // Note we update the heatspace in two phases: first run8 q ~& _2 Q, f( V2 F3 O+ i, I
// diffusion, then run "updateWorld" to actually enact the G5 W, w" Q; {7 I! N
// changes the heatbugs have made. The ordering here is
- K# O' L5 J8 I5 M // significant!, `3 J) [9 u4 Y& l
" A8 J& @: x: x! F \ // Note also, that with the additional! ?1 @( o) H2 `& q" [+ n/ D# r A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" ~3 p* }4 m4 z- f1 K* p w // randomize the order in which the bugs actually run' z @& S6 Z' j, {) |* U
// their step rule. This has the effect of removing any# H4 o7 T& p" X) c7 v7 j
// systematic bias in the iteration throught the heatbug
" r$ U# T( w$ H* D4 |3 `2 Q // list from timestep to timestep
( T- D" K4 j6 N: e1 ~* n$ A
, p& F9 i5 J- {7 } // By default, all `createActionForEach' modelActions have% o9 w7 |0 C' I( x; ]- N
// a default order of `Sequential', which means that the; V3 F, H( [6 p) ^1 V$ p
// order of iteration through the `heatbugList' will be7 |% j, S9 k6 x& A
// identical (assuming the list order is not changed
5 v; o/ s e2 _ Q! P // indirectly by some other process).
1 k i& A: _2 P1 ^+ _8 O! |- L
) F& i* S6 ~' v/ f' T. U modelActions = new ActionGroupImpl (getZone ());2 G/ F: [- i& T2 G
/ ^9 t/ O. H& d X3 }
try {( C7 ~1 O e/ ]5 L* L* v3 `
modelActions.createActionTo$message% ]. E, B! e: V- e) L( j
(heat, new Selector (heat.getClass (), "stepRule", false));% W0 E2 e7 M: G) j6 t- g
} catch (Exception e) {
D2 h1 p: l3 ?) a8 \, f System.err.println ("Exception stepRule: " + e.getMessage ()); M1 t' l1 V+ O1 i# [
}
4 q4 W% X- J6 R3 g: K9 r: w6 F @ i8 V# \+ f' x* w7 {: o) ]
try {, ]$ f3 U: H% X% _+ w; W4 _
Heatbug proto = (Heatbug) heatbugList.get (0);
; i& P: b0 y! u: R Selector sel =
! R: w, \7 ?2 n0 M' a/ f" O new Selector (proto.getClass (), "heatbugStep", false);6 D ^/ h5 z7 s
actionForEach =% S( Q% k0 K) g
modelActions.createFActionForEachHomogeneous$call+ K/ V0 R! u7 ^5 a" [, N+ g
(heatbugList,
1 r4 d& _/ ?" Z new FCallImpl (this, proto, sel,
{3 l q8 v# t: } new FArgumentsImpl (this, sel)));! T, V/ v% w# `' U
} catch (Exception e) {. h/ W3 ]! o/ F W B4 U9 v" x
e.printStackTrace (System.err);9 D* A4 l$ a7 a6 @- g, S
}
+ r4 z1 J, O( v+ E# x
; u5 Q9 a* @0 _; i# e syncUpdateOrder ();9 u6 m( ~+ w4 q% C
?5 }3 Q3 ] e
try {' H( E7 W, I j) J4 `6 O: I
modelActions.createActionTo$message 2 R* l# q: y5 e. ^0 L9 {$ Y1 \
(heat, new Selector (heat.getClass (), "updateLattice", false));
" w! ?4 L' x2 C; K } catch (Exception e) {
5 E: P! ]* S9 r( N' J8 h/ V System.err.println("Exception updateLattice: " + e.getMessage ()); x+ R) b: d9 U* V5 j8 C. c
}
6 W1 X+ r; T; o2 o, m1 a 2 E4 A# E! A3 U0 w; a
// Then we create a schedule that executes the
, X8 d+ j/ d8 ~* J // modelActions. modelActions is an ActionGroup, by itself it
M0 @9 G5 y; u' R+ x$ | // has no notion of time. In order to have it executed in
" |6 Y% q* d5 u) Z. u // time, we create a Schedule that says to use the D, n8 K9 i: i$ V+ h& v2 ?; m
// modelActions ActionGroup at particular times. This
3 |* T6 G( k8 u8 f, Q // schedule has a repeat interval of 1, it will loop every
; P1 I2 B4 Y6 i% Q // time step. The action is executed at time 0 relative to
5 A1 S7 }3 m0 u' R // the beginning of the loop.+ ^1 \1 f4 _* t2 q6 N
; E7 [" X$ y' u0 o* {% N // This is a simple schedule, with only one action that is2 v1 n; @$ i/ h- N3 F3 R9 q7 z
// just repeated every time. See jmousetrap for more
( Q8 C6 n `4 L( G* h // complicated schedules.
/ g3 p2 B* g: V+ Q- z* _ 6 z$ ]% J: R+ O& M, n; I1 C
modelSchedule = new ScheduleImpl (getZone (), 1);7 [: b' I7 C. e
modelSchedule.at$createAction (0, modelActions);
* R# h# h+ \2 Y7 e1 K9 { o
& x5 H7 O" o8 [) w6 @4 Q0 c! P3 y return this;) N/ \! J5 d/ g
} |