HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% R) G; z1 O' U7 Y: k7 G. c1 v) s
r: g2 ?: T0 o9 N/ I7 U+ o& b- h5 ^ public Object buildActions () {
9 g6 x& v" K8 [4 @ super.buildActions();
9 j; }0 b% ~4 _ M9 H; B) V, l - O- V" m9 t( B& |1 Q* O
// Create the list of simulation actions. We put these in" x. a% F3 l5 y! N: x
// an action group, because we want these actions to be
! H. o" r" K$ A // executed in a specific order, but these steps should4 W2 w/ A, _7 e6 {& r0 w
// take no (simulated) time. The M(foo) means "The message
- K4 {( ?6 y8 u8 a* n5 @& ?0 D // called <foo>". You can send a message To a particular
. o/ t; F$ \# R5 p // object, or ForEach object in a collection.
. D E8 y" z2 Y- ]
, o. h' Q- d3 X J9 f" U // Note we update the heatspace in two phases: first run
5 M( N; E; @; k- t // diffusion, then run "updateWorld" to actually enact the' a* q+ L2 P' j/ }
// changes the heatbugs have made. The ordering here is
! x" ~4 L. Y) _; b# p# M! s: b // significant!
' J x. ?3 z" R- n$ j1 @
# V R+ g/ C+ Z- [) Z // Note also, that with the additional5 ^4 I# s# Q/ R# k. \3 U
// `randomizeHeatbugUpdateOrder' Boolean flag we can) R0 m9 Q& f6 |& D) G& ]
// randomize the order in which the bugs actually run* P G8 M6 h7 a$ R# S
// their step rule. This has the effect of removing any
6 u- I0 s+ _6 Z: s2 q$ e+ ~! m // systematic bias in the iteration throught the heatbug3 C: P$ T% N$ n- L( S$ h
// list from timestep to timestep" b. q5 u0 C6 n$ k2 A3 g6 O
" ?& k9 R9 t) r. ~, A' _1 W // By default, all `createActionForEach' modelActions have4 {# H* h' C* k2 q% }
// a default order of `Sequential', which means that the
) k$ k# L# T8 a5 S, ~ // order of iteration through the `heatbugList' will be
) \" J' C: f. \: ^# T // identical (assuming the list order is not changed1 S v% ]9 @, l5 F& X0 J4 t( a0 s
// indirectly by some other process).8 l. j: {0 y4 m( R2 o
1 R7 e4 `! P6 N6 r* x( a+ g modelActions = new ActionGroupImpl (getZone ());* b1 k1 a, G" i$ C9 q
) ?, R0 N' X/ x4 N try {
/ j% K' T; }+ F- Q7 S8 t; \- ^! ^6 o modelActions.createActionTo$message* ~* D; q, Y: Y n# E) {
(heat, new Selector (heat.getClass (), "stepRule", false));
: I) c% R' |! D0 {# o } catch (Exception e) {
9 ?; C6 d% p+ t System.err.println ("Exception stepRule: " + e.getMessage ());! i& B& V* T0 _1 n
}2 c1 O5 _8 Z+ u* [ Q$ l# s6 M( g, s: ~
: x3 Z) ~3 r; V3 w3 O, K3 m0 d* F' } try {
% G4 \5 I' U) ^# ` Heatbug proto = (Heatbug) heatbugList.get (0);7 @5 K9 U" i6 i6 X4 z1 t" d
Selector sel =
: I3 h, v. O- O b2 d* _% I new Selector (proto.getClass (), "heatbugStep", false);/ x0 {# }) q" ^ S$ G8 w' Y+ x
actionForEach =
- O/ l5 C H6 D: K* ^. ]/ n& C modelActions.createFActionForEachHomogeneous$call5 I1 O1 _0 O A4 h0 k* l
(heatbugList,% C8 ^3 K% f$ B; @
new FCallImpl (this, proto, sel,- K( e8 T( d' v1 s! h, {! f1 ^
new FArgumentsImpl (this, sel)));5 _& g; M3 h) D) P* S
} catch (Exception e) {! X. B7 K1 s7 Y3 d6 |. e$ [
e.printStackTrace (System.err);* b, a& B1 @% N+ |
}9 F( W e7 q8 ?$ L2 T# q, ~+ `
3 o) R2 S' E/ _+ {: x syncUpdateOrder ();7 n! L: Q( y$ [
3 }5 i, S. E+ h! A3 [ try {
! w3 r8 \1 g) k4 t8 u3 L modelActions.createActionTo$message
/ l+ r$ \1 t6 _, Y% f+ [+ p (heat, new Selector (heat.getClass (), "updateLattice", false));
) @+ {6 z& j) K# [/ V } catch (Exception e) {
5 J, R6 q2 \7 c( u& p- N) S$ b! C8 h System.err.println("Exception updateLattice: " + e.getMessage ());
8 n6 U' o, T5 I }
5 y/ y9 ^- \5 Z W 4 r4 U5 x% w4 Y0 m2 R6 N" `" M
// Then we create a schedule that executes the
3 ] ]% R4 \. V9 @ // modelActions. modelActions is an ActionGroup, by itself it% p( ] G7 L* P3 F" Q
// has no notion of time. In order to have it executed in
- k f: N a# e$ m( v' _ // time, we create a Schedule that says to use the& L/ M: [- C# a. ]
// modelActions ActionGroup at particular times. This* g+ g( e) N4 p' _! z
// schedule has a repeat interval of 1, it will loop every8 o- N( j7 ^5 z& k" r) G! ]
// time step. The action is executed at time 0 relative to
: K6 B6 [7 o% h5 ~" z* q // the beginning of the loop.$ n& E/ E" A9 o0 X _
" V& `# J, A, ~5 F4 Y; _
// This is a simple schedule, with only one action that is: N q) ?# P" e/ L
// just repeated every time. See jmousetrap for more# O, G& ?8 W4 V$ l! ?
// complicated schedules.
) K3 Y2 E- b" C2 |/ _ # k1 V7 Z6 ]$ O
modelSchedule = new ScheduleImpl (getZone (), 1);
" i; E' h6 g* j9 w modelSchedule.at$createAction (0, modelActions);% {: X6 n; F7 W( U7 `( U5 [8 A
. ^: i1 l* g% q! [7 r9 U: h0 N% W( \ return this;" G8 m$ g3 U" G
} |