HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 Y: I6 g7 M2 t1 m( m& ^3 b; z0 d: S" p1 F' U! Y' b+ N: k
public Object buildActions () {
5 Q( A& C+ E. C2 _ super.buildActions();
7 L; K/ @9 x8 y( D + m+ t1 u9 F: [, H. J; n% p+ n1 c& @
// Create the list of simulation actions. We put these in
0 x; k' K, ^" B7 E, s* r // an action group, because we want these actions to be
6 y& t5 ]9 M7 A! m, v% ~* {' h: t // executed in a specific order, but these steps should
0 r, m, h9 m3 t1 [# `- }4 H // take no (simulated) time. The M(foo) means "The message
9 K; o2 E- R# m/ o& I2 m // called <foo>". You can send a message To a particular
; |8 \( H- u; j // object, or ForEach object in a collection.
9 l4 F9 ^4 p0 s3 m9 A 3 T. ^1 Q b4 r, y& i7 I) q* w5 D
// Note we update the heatspace in two phases: first run
}9 i+ t; O* s9 }5 Z // diffusion, then run "updateWorld" to actually enact the' t/ p0 M% z% ]0 c
// changes the heatbugs have made. The ordering here is2 N8 U4 J7 [! Q9 s/ V7 e9 w- A
// significant!
2 U1 m4 a6 e, `. j8 N2 P! _/ ? ; z7 o5 z. j2 R3 y/ n
// Note also, that with the additional/ ]4 O! r# ~# D. b9 B9 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( l. {5 J* o/ L! C+ e' K- O // randomize the order in which the bugs actually run7 M; q8 s7 j9 \& W. s
// their step rule. This has the effect of removing any8 x9 T% J! T* o. Q3 ~6 N5 s
// systematic bias in the iteration throught the heatbug
: ^0 d0 Q; s/ S' g6 C. W // list from timestep to timestep1 l. f+ c7 d. E
! t8 ]9 r2 y7 I* F/ s& E& O! {
// By default, all `createActionForEach' modelActions have
5 ~- g4 t* T# S/ _; G- q: L3 D2 \ // a default order of `Sequential', which means that the
3 c# H+ K6 T" F, c# j" J, e! W u // order of iteration through the `heatbugList' will be
. M2 Q1 B# b3 @3 H/ r1 V // identical (assuming the list order is not changed$ X8 F+ W; G/ E+ \
// indirectly by some other process).! [& d( ]3 ^+ K4 a% G+ ~5 O) b
3 h3 u8 A/ h# I: C: j modelActions = new ActionGroupImpl (getZone ());% v P- M2 d5 I
* ]2 y1 y2 @" M3 p v& V5 I- ] try {
/ x. [) D: u+ c* b1 i, z modelActions.createActionTo$message( \! S! g$ G1 K5 }/ [) \
(heat, new Selector (heat.getClass (), "stepRule", false));
& g0 B r7 b6 Q8 B } catch (Exception e) {
# B# a9 D5 V; D* [7 O System.err.println ("Exception stepRule: " + e.getMessage ());
' V; P/ T% v5 N2 X7 x1 R }
# r# z, S" n$ ~' K; e0 C5 ^2 }' r3 ~5 P/ p# c
try {
8 C' w( A" l; L G Heatbug proto = (Heatbug) heatbugList.get (0);
& f" E/ T" c, y Selector sel =
# B" |! Z6 c. K- a' I& w1 l new Selector (proto.getClass (), "heatbugStep", false);9 |/ w+ h4 e: K
actionForEach =
5 q- H* b4 M9 S: H( A6 @* M% s modelActions.createFActionForEachHomogeneous$call
* ]# r$ K7 f+ U0 a) [, L/ p4 L8 s (heatbugList,+ }8 d8 L$ f/ i
new FCallImpl (this, proto, sel,
, k/ _% C1 b7 g) B- q" [ new FArgumentsImpl (this, sel)));
: |7 R$ |5 n. J! H8 M; M* P( ` } catch (Exception e) {
1 O r0 o4 S, U e.printStackTrace (System.err);
+ }( F2 E6 C7 X4 q- h1 S9 Y }
/ p" y0 d" n/ f) @. Z
+ r# ?6 D1 H4 N* |* d syncUpdateOrder ();
7 [1 x& s( }! V+ A w4 ]2 N1 V; \! p& @9 \( @' ~
try {
% h1 u5 g) q3 p modelActions.createActionTo$message
% j% S' z {% O/ Q' w1 R (heat, new Selector (heat.getClass (), "updateLattice", false));
* `$ H8 U0 L/ j9 C8 Z; S } catch (Exception e) {
" r+ K4 L5 j& {+ C7 ` System.err.println("Exception updateLattice: " + e.getMessage ());
, X& E& P& s1 f K T% k5 y0 W }
/ Q2 r8 L p1 g) p ! d7 s/ H8 i2 ?6 d* u
// Then we create a schedule that executes the# p' R2 ~( y p5 s1 {* [" X
// modelActions. modelActions is an ActionGroup, by itself it+ i' [" W# B) k: g4 V
// has no notion of time. In order to have it executed in) D1 X ~1 ]( X$ n& N# ]
// time, we create a Schedule that says to use the
! x7 ~8 N* L r8 w" J# c& Z1 [ // modelActions ActionGroup at particular times. This
7 O; p' I. ?1 X8 G' `7 g8 c // schedule has a repeat interval of 1, it will loop every9 a' S/ t$ j* I2 ]$ p
// time step. The action is executed at time 0 relative to( |6 z( { W6 v: W
// the beginning of the loop.* z; y3 Z7 B! ~5 K8 X6 |
6 n N, W- T+ h1 j2 a // This is a simple schedule, with only one action that is
- u9 ^+ [8 _& t) c5 R% \, S) q // just repeated every time. See jmousetrap for more
: I1 i3 {1 M d4 G5 D. I // complicated schedules.9 [1 E* }% M, j( x3 g W i$ O
# k- T9 G# B! D# t
modelSchedule = new ScheduleImpl (getZone (), 1);! ?& v) X" s# y4 O
modelSchedule.at$createAction (0, modelActions);
" n8 F- U1 {, l$ v3 t! C# w , R1 |9 J$ z) X5 t4 P( W% p8 |. v
return this;2 j& Y- l' y: {% P: V+ d
} |