HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) v5 q0 ~. h: ? h, n$ H6 g+ g' [! m0 F; \, p, d1 J; G
public Object buildActions () {' h L Q; v/ [1 X% L+ G9 }
super.buildActions();/ O ~ {( p7 s7 P6 C
, a4 [% h2 ~& [8 a/ P
// Create the list of simulation actions. We put these in
+ n7 Y' E2 |" [) i // an action group, because we want these actions to be! N- e# m u; [3 W
// executed in a specific order, but these steps should1 \8 T" n' I3 y( a+ t" r4 D# r
// take no (simulated) time. The M(foo) means "The message
/ L% ]% G% m3 G( R9 g // called <foo>". You can send a message To a particular0 \: W4 a! p U) h9 `* U
// object, or ForEach object in a collection.2 Y' \+ N7 K6 Y& V
! W; E" O9 V, l# W4 G, I, ~ // Note we update the heatspace in two phases: first run
7 U8 i, J l* \1 z3 ?/ ^) A: |1 a6 W // diffusion, then run "updateWorld" to actually enact the
; y6 n( `# Q' Y' T7 E // changes the heatbugs have made. The ordering here is
" I8 a0 i. I! S. B% y. p( c0 U* U* o* I // significant!
: [2 E- p) X5 g; v/ c
# C* s# |8 @# b7 h // Note also, that with the additional4 B2 t4 R) G; q! K4 A9 B5 X0 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 z& |: P. Z2 Y9 T8 v
// randomize the order in which the bugs actually run
& w2 U; c9 |! R9 f8 M3 K // their step rule. This has the effect of removing any
' f$ Q1 S4 T& s // systematic bias in the iteration throught the heatbug% C; q# G2 c3 v1 o6 p2 T8 n" c3 l. w
// list from timestep to timestep
# R0 F9 q) z! Z+ Y; R 6 ~, _; T# I/ D' ] a7 K7 L
// By default, all `createActionForEach' modelActions have
i8 {- s* f7 l% _ // a default order of `Sequential', which means that the" L% s/ Z w& J+ k O; ^% X8 u
// order of iteration through the `heatbugList' will be9 E# e* Z- g" k, N
// identical (assuming the list order is not changed
) r! q( r/ @* J2 `6 w! D! k4 q // indirectly by some other process).4 i. Y9 E9 q: J) Y6 {
/ n- P2 _7 U X9 x modelActions = new ActionGroupImpl (getZone ());
% o6 a7 ^7 w0 o. y8 y
* ^+ g k) q- \! ? try {
}% X3 a, H. `" Q modelActions.createActionTo$message
1 x. [+ w1 Q# ]2 r: H/ l2 C4 V8 h (heat, new Selector (heat.getClass (), "stepRule", false));
8 b1 u/ G: U4 [4 x" V6 h2 t } catch (Exception e) {3 ]5 v, B2 C, g: Z& L8 F- U
System.err.println ("Exception stepRule: " + e.getMessage ());+ W$ M- E. ^7 y
}
& ?( Z0 \- G- d( G" I6 {" ?
# D. G0 j/ g7 P1 L try {" F) a- s* A( c% I# D" }6 i# S g
Heatbug proto = (Heatbug) heatbugList.get (0);- e( r6 }/ g9 U0 [
Selector sel =
a( y! e" j8 d3 { new Selector (proto.getClass (), "heatbugStep", false);( q: U' A0 l/ O5 P+ [& N/ k
actionForEach =% W2 t7 z+ p2 [9 C! ^- w/ j
modelActions.createFActionForEachHomogeneous$call# J; F' B0 i; w- ?. G2 o' f
(heatbugList,
) ]# o7 C9 E0 ?0 v7 J0 a A new FCallImpl (this, proto, sel,) n: _0 |. I9 B: a% X. I
new FArgumentsImpl (this, sel)));
) p! F0 K2 C9 M7 W, {. K } catch (Exception e) {
% ~/ ?0 G) P; B F5 \" n+ D e.printStackTrace (System.err);; i( x7 t ^ g% F- d) H1 F
}1 H y. ]" z" m: L9 V9 U/ _; _
0 {; j- x3 ?& | G) p8 o# P syncUpdateOrder ();
6 u% q6 s0 ^& @7 L
: w5 W9 k5 Q9 r0 `' X" y try {$ }) n/ C- |/ f( w# T! u
modelActions.createActionTo$message
4 T$ O2 h7 c# F7 f( K8 l/ a (heat, new Selector (heat.getClass (), "updateLattice", false));
# q7 B; K& x0 h; W2 \) r } catch (Exception e) {
: L$ M0 R) }. p. [) h System.err.println("Exception updateLattice: " + e.getMessage ());( k, x5 a+ u9 L2 v4 o$ s ~( _
}: g, \8 x) O& C! |; V( n7 U
* k% w! @/ ?5 w; S+ `/ a& R // Then we create a schedule that executes the8 z( G. H2 Q, R& c9 p7 Z# `
// modelActions. modelActions is an ActionGroup, by itself it
! a! [6 ], u) _" Z5 g% I // has no notion of time. In order to have it executed in) N4 A* v4 k# E5 ?" E6 f% G- `+ t
// time, we create a Schedule that says to use the
6 _5 T' ~2 M+ |8 p8 z: g // modelActions ActionGroup at particular times. This
1 H% G& \- X i. B // schedule has a repeat interval of 1, it will loop every' E/ o/ Q8 w- b
// time step. The action is executed at time 0 relative to
$ s9 r/ U4 H T$ d1 j2 {0 C // the beginning of the loop.
0 l- O8 R6 f9 D/ Y H" }5 i
% O4 y$ v3 C; u, Z // This is a simple schedule, with only one action that is
0 n) J2 P% E4 \2 w8 W- f6 s0 \( I+ K // just repeated every time. See jmousetrap for more
/ Q) A; X/ B+ }$ k2 O1 D; G // complicated schedules.
) x( Y8 Y% e3 I# B$ U4 `
0 m8 y) s" ]. z# |. y modelSchedule = new ScheduleImpl (getZone (), 1);/ \' W" {# O/ f$ G7 w) O8 Y
modelSchedule.at$createAction (0, modelActions);
/ W! L; \& |" h9 {+ z
+ |, g1 @8 R- o! y( _/ x return this;, f0 e7 b. K' r, H- s
} |