HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! n+ X1 y3 ~7 @8 Z4 Y& L
" U/ [9 L) D' V) `; v public Object buildActions () {
% \4 `) O& R5 M* |5 k super.buildActions();; T$ e* W% D/ Z
* ^3 H/ U7 E# n1 T }
// Create the list of simulation actions. We put these in& H: [3 @" j5 y! t6 \3 y6 H
// an action group, because we want these actions to be/ @* u' _0 _/ Z8 C2 g. P, J
// executed in a specific order, but these steps should
9 e7 t! ]1 _7 y% C, _* M: Z // take no (simulated) time. The M(foo) means "The message
9 a" q1 J: V4 h- I9 [; ` // called <foo>". You can send a message To a particular
9 j" S9 t& P' j4 ? // object, or ForEach object in a collection.
2 k# M. _" I5 s4 [7 H8 S + x3 b7 u. J) r% I0 @
// Note we update the heatspace in two phases: first run
4 _ Y1 x0 h& x; E( Y1 |# U. l // diffusion, then run "updateWorld" to actually enact the+ ]9 D9 q$ |1 _8 w
// changes the heatbugs have made. The ordering here is7 \% i2 |' N" {7 W2 L3 v
// significant!/ u& j8 x1 O7 c0 U/ n/ w/ d! z) L. |7 ?
& h. c$ Q; t) v& e; U: I0 ? // Note also, that with the additional- [) X& S# J d" g
// `randomizeHeatbugUpdateOrder' Boolean flag we can
* i4 e( G, H) e // randomize the order in which the bugs actually run: W- @; h$ A+ e" h
// their step rule. This has the effect of removing any& h' ?" O0 c# J1 @; g, [8 Z0 I) ?
// systematic bias in the iteration throught the heatbug
3 B8 k' S# X7 W% p- c3 G // list from timestep to timestep! ?/ c% y& \- x* e
* z5 c6 }8 t9 a- ^) a5 Q+ F // By default, all `createActionForEach' modelActions have
: J7 `% G3 v& D // a default order of `Sequential', which means that the
. i& P6 E- Z! r5 O4 r& p8 D // order of iteration through the `heatbugList' will be3 W8 e( N& o$ z7 ~+ O
// identical (assuming the list order is not changed4 L/ Y/ Z* b1 X4 z/ `
// indirectly by some other process).
- E, s/ L6 t1 T0 B9 ] , a- w4 \+ f2 ~5 A: q. u' r! o
modelActions = new ActionGroupImpl (getZone ());! O" T- ~4 z& l8 X
" ]: J$ N5 O0 p g try {, `! [* K3 L1 ]" F
modelActions.createActionTo$message
1 A9 ^4 C5 l/ T4 ` (heat, new Selector (heat.getClass (), "stepRule", false));2 |. K. h' j. N- ^4 I) C! K
} catch (Exception e) {: C4 L0 _9 \/ o. {8 g$ A2 H- a* _
System.err.println ("Exception stepRule: " + e.getMessage ());0 I0 B1 \. E3 ^2 \
}
# {3 @# h3 c7 V9 D) Y% ~( t9 f
try {, \3 D" U) d6 j0 G
Heatbug proto = (Heatbug) heatbugList.get (0);
( G1 E& y. h" r0 R/ v+ m. N Selector sel = : b* f1 [" h1 [5 m8 y! X
new Selector (proto.getClass (), "heatbugStep", false);$ I R" X: q! a* b
actionForEach =
0 I. W b/ b& d% b1 e. h$ Z modelActions.createFActionForEachHomogeneous$call) I' A+ S7 B% g; U3 y% S
(heatbugList,- O# i9 R! v# x- j- p; ^4 R
new FCallImpl (this, proto, sel,
. a2 a! ]" T# I- i new FArgumentsImpl (this, sel)));1 h7 ^, i/ }6 ~2 r/ C& ~. [
} catch (Exception e) {% _4 m$ y. L0 _. e( ]; W
e.printStackTrace (System.err);' I1 E( O {1 p0 y' p2 _( `: B% F, h
}
! x; W4 Y+ H% R# G4 H$ Z 0 K5 P( |$ m0 u6 h$ C
syncUpdateOrder ();# F- I$ ]) _. h' W2 a8 g! n) s- t
3 J: a. Y* R" ?
try {
1 S& q- y I: o2 a modelActions.createActionTo$message ' f- l! j2 u4 G( u; ~
(heat, new Selector (heat.getClass (), "updateLattice", false));
' d% F+ I, t7 G/ r; ]% U } catch (Exception e) {
) e7 l+ @! |8 y5 U7 ] System.err.println("Exception updateLattice: " + e.getMessage ());
9 \! `4 o) |9 Z1 x1 M. F5 C }, V& ]4 Z( k: |* d5 W% N- J1 O" p9 ]
' w. g% m! p! t5 [0 }
// Then we create a schedule that executes the, u9 q9 t/ g' R. y4 ]
// modelActions. modelActions is an ActionGroup, by itself it9 r8 W6 F+ W f# }+ B9 a
// has no notion of time. In order to have it executed in% T0 ?5 q% Z, v
// time, we create a Schedule that says to use the, S. i- V* k8 I6 s& s
// modelActions ActionGroup at particular times. This
/ W9 U8 N# R2 A% p( G // schedule has a repeat interval of 1, it will loop every
# q$ t5 V9 m- J0 V5 ? {& h9 } // time step. The action is executed at time 0 relative to0 M, b8 D& S9 g; _& A
// the beginning of the loop.
* S5 m% I. |9 s, t4 M2 v% l" [% a/ Y! a2 K+ x) J1 v0 Z4 j
// This is a simple schedule, with only one action that is, K+ ^, _' p$ W' X1 x7 @
// just repeated every time. See jmousetrap for more
: \4 w1 h, i" n // complicated schedules.
3 s* [( d1 x$ b( F4 P3 E q & l, v. n4 x3 H& \; S, H: f
modelSchedule = new ScheduleImpl (getZone (), 1);
; G3 _. G2 p1 M# a, k modelSchedule.at$createAction (0, modelActions);
4 n) A6 {# R% }3 J6 Q6 Q : q9 |& p) \. \( @) {* d
return this;( D" I+ R, h' z# Y' x
} |