HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. o+ A, N) |; l A
0 M/ [" `' }2 m6 |+ K public Object buildActions () {4 K2 ]: x/ r0 I5 m ~$ E4 R# f& `' G" L8 e
super.buildActions();. J) x, }1 w% A' E
0 B- E6 n5 T9 q
// Create the list of simulation actions. We put these in3 s# z5 r3 \& T4 ~6 i
// an action group, because we want these actions to be
" O* u P! q( L, D: X1 T! `# R5 { // executed in a specific order, but these steps should
# \ b; h8 _- }- ]5 d- \: P8 _ // take no (simulated) time. The M(foo) means "The message8 G+ ~7 \9 m/ v
// called <foo>". You can send a message To a particular1 Z3 Z$ [$ }3 B9 p# R; z/ H
// object, or ForEach object in a collection.
' ~2 k) [$ c5 ` / ]. m; m8 }- }- K
// Note we update the heatspace in two phases: first run
$ j2 W) l, P5 ?4 D; f n // diffusion, then run "updateWorld" to actually enact the, F! O# {& J% ~$ q, b& N1 {0 N
// changes the heatbugs have made. The ordering here is
8 G2 ]5 Q0 q9 |9 V" v9 { // significant!7 l. A' d, U6 I) j
0 s. \" |- F( G5 _4 O+ J& T // Note also, that with the additional
5 g2 _# U: F# z+ {9 W3 g // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 d1 q8 j/ i. D# K; P2 q2 W // randomize the order in which the bugs actually run' f5 l# Y( ^7 U! e
// their step rule. This has the effect of removing any3 C N2 J- k8 Y# `, e
// systematic bias in the iteration throught the heatbug
* q B. o7 ?% w1 [( ` N // list from timestep to timestep( r4 S$ z! I! I) ?
' G. O7 V% ^+ e$ R // By default, all `createActionForEach' modelActions have
+ r2 h' y0 J8 Y* l // a default order of `Sequential', which means that the
; m# H6 u; D- b t6 k // order of iteration through the `heatbugList' will be9 F2 j: v! h) {
// identical (assuming the list order is not changed
( r6 W' r% `) S1 \7 S // indirectly by some other process).
$ J5 W$ ~0 v1 |$ \( J# Y3 V0 U
; A& Y. I" B9 Z. u. r modelActions = new ActionGroupImpl (getZone ());3 k! m' B/ T! q' u6 M9 F! k5 a! z8 e
& d/ @6 d- u4 C y$ U3 Z try {' p: v' z/ Q: @: N6 e
modelActions.createActionTo$message, u9 [/ E+ ~/ S, G; W/ m9 }4 z
(heat, new Selector (heat.getClass (), "stepRule", false));8 {; C2 t7 `1 R. W- H" d. Y: H
} catch (Exception e) {2 d7 {1 X/ b6 G6 c6 o) S, R
System.err.println ("Exception stepRule: " + e.getMessage ());: G. w$ f! q0 |( Q: Z
}
, a* K2 c9 o) w) @+ A1 G; e; ]0 G" V* w& }; B9 X; A0 W' h
try {# }; m5 l2 G! b9 W; q
Heatbug proto = (Heatbug) heatbugList.get (0);
! R' @& E& g3 v- E Selector sel =
4 a& g1 z( X n Q/ f+ X9 W8 X new Selector (proto.getClass (), "heatbugStep", false);. Q z* ]9 R6 q
actionForEach =% |: Y! y, M4 W% M* f/ b4 T9 l# u
modelActions.createFActionForEachHomogeneous$call" P) W8 t, u# s c/ \7 |
(heatbugList,9 E. C5 [( Z) w. U/ o3 u+ ]. W
new FCallImpl (this, proto, sel,
7 T2 K6 G; i7 u* R2 Z new FArgumentsImpl (this, sel)));
0 c p S) T1 O% }6 A' ?2 Q } catch (Exception e) {$ }* R- j; u F3 @2 l2 k% @
e.printStackTrace (System.err);
8 t! c! {* I$ o+ P7 s$ z: @$ \ }
) A) ]! R' V5 ]; W! J/ k
8 S% a! G, F, V syncUpdateOrder ();
, `; {) c& x' ?4 n
# \) c' W0 s4 {. ]' r7 O try {
5 ?" D$ C& s1 [, d modelActions.createActionTo$message
- L; J+ j0 U" I (heat, new Selector (heat.getClass (), "updateLattice", false));8 o! s6 r( B3 R, L# L
} catch (Exception e) {
/ W7 a5 f, Y) X3 {" @1 k; Z System.err.println("Exception updateLattice: " + e.getMessage ());
, f- q+ r! A- v# Z- h, T }
, [' l. _+ }- a; k# i. u1 n
m7 {, |3 c: O* @3 ] // Then we create a schedule that executes the
l4 p" `. w& [) G2 ^- D4 a // modelActions. modelActions is an ActionGroup, by itself it' x. A3 r' y0 i3 U: F* M7 v
// has no notion of time. In order to have it executed in
; x( M* o) ?/ \% h6 x! V% \ // time, we create a Schedule that says to use the) s: u9 q' O8 K: `/ Q) _
// modelActions ActionGroup at particular times. This0 C1 f: f2 F7 H. |" x; n( z% E
// schedule has a repeat interval of 1, it will loop every6 E9 g& E4 \5 W2 w; B' b
// time step. The action is executed at time 0 relative to6 x" v" \; a, X. F8 h, M
// the beginning of the loop., w, F9 f- h; j: q4 G
( T+ d+ r* o# ^9 P9 [ // This is a simple schedule, with only one action that is
! k6 @ g/ b$ \1 u/ r // just repeated every time. See jmousetrap for more$ s7 [+ I; I5 d# ^1 Q" A
// complicated schedules.
5 N4 T" \, @2 e8 p; V) F- S% ?/ J3 @
) m# E; f5 q! k/ z6 f' @ modelSchedule = new ScheduleImpl (getZone (), 1);' o8 s7 D% [1 w# W
modelSchedule.at$createAction (0, modelActions);
8 }3 z3 o( q2 G) f 8 {' [! ?6 R$ `5 m
return this;
2 s* l5 `8 O6 r } |