HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 r- ?2 Q& P0 {6 T& m( B/ K5 K9 L1 Z5 y$ v. ^# A
public Object buildActions () {. H8 P1 k$ a) U1 }0 M- q
super.buildActions();
7 L0 X& @, H0 I! e ) y4 e1 Z$ M7 q3 N# f
// Create the list of simulation actions. We put these in
7 ^5 k' b6 J5 G3 {8 y$ }" m8 O/ T // an action group, because we want these actions to be
+ [3 j7 m; N3 _2 o" t) e // executed in a specific order, but these steps should
/ L; ?8 \# [. ]' b4 l+ F$ k // take no (simulated) time. The M(foo) means "The message% V% }2 r# y4 N" H/ h
// called <foo>". You can send a message To a particular
; [, }* M _' [ // object, or ForEach object in a collection.4 L1 t: R; J+ {0 v% X5 H
% O( P( O4 g+ c% @& m+ U- b8 Z
// Note we update the heatspace in two phases: first run0 T. }7 ?9 }7 G! @# e+ `5 Y
// diffusion, then run "updateWorld" to actually enact the
/ r1 a3 i2 O& L // changes the heatbugs have made. The ordering here is! I( ]+ A7 P: c1 I
// significant!4 G' w/ e; ~6 A
7 c+ [7 Z9 ?7 h4 Q7 C6 b1 X4 R4 [: e // Note also, that with the additional, G$ Y' W( D6 ?& a2 u9 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! j o. q% w4 A% \2 M- M! K // randomize the order in which the bugs actually run
V/ e/ a! E& C: `# N/ J# z // their step rule. This has the effect of removing any
. b4 o/ f7 Y6 b# W // systematic bias in the iteration throught the heatbug
0 T8 [: u$ L) \% ?4 A // list from timestep to timestep
+ `$ @+ g* a+ l6 u3 }# p9 W . E- m9 l% q8 ^4 B
// By default, all `createActionForEach' modelActions have7 y! L _* s$ v( F( {
// a default order of `Sequential', which means that the; x5 O; n$ \7 t( X7 o
// order of iteration through the `heatbugList' will be2 ]* x. N2 n x7 N
// identical (assuming the list order is not changed- Q* h- T* y6 V* {8 t4 Z+ e
// indirectly by some other process).
+ S; \& l3 k5 o# Q8 F
$ g4 ~/ R; ^5 L modelActions = new ActionGroupImpl (getZone ());
! o# R/ y9 O V8 l2 M1 o, }
8 F, d' ~ X; W try {
/ L+ o' R; V* V8 h* y) {% U% B modelActions.createActionTo$message$ t" l4 B. Q* i* j" v, A
(heat, new Selector (heat.getClass (), "stepRule", false));. o' E4 M1 a- i# @: {& M
} catch (Exception e) {
; h* B' e& ^% ^& l0 K# s/ }% b$ w V System.err.println ("Exception stepRule: " + e.getMessage ());
0 w( i9 _- W+ d0 Q }
2 {( X6 \. S( g* v" E- W9 q% h
! M( L1 A/ ]8 }0 w try {" R/ c6 h4 }6 `: `' N7 F& _# m
Heatbug proto = (Heatbug) heatbugList.get (0);4 @. q( v& ?$ f" J5 V. j ^# i
Selector sel = 1 b6 Y. Z# Q7 T8 Q
new Selector (proto.getClass (), "heatbugStep", false);% r. W, ?8 U* F9 s- _& ~
actionForEach =
6 Q2 d- g0 O, Y modelActions.createFActionForEachHomogeneous$call
6 @# G+ R% \& i8 }0 L, B) } (heatbugList,
4 R# O) D) B- H5 q4 I new FCallImpl (this, proto, sel,
8 J+ Z0 k, I. X1 i% o new FArgumentsImpl (this, sel)));& a" j+ C! j+ n6 {/ w3 A1 X* E
} catch (Exception e) {
8 |0 k! o9 x. I e.printStackTrace (System.err);% v0 r6 L5 h8 o/ k
}: U) q( l, z% p9 L5 c) D* S; Y0 H
& W+ Q y( X3 E8 ^2 ^' h* C syncUpdateOrder ();% ~: V$ w% r- C: H5 c) H& k6 S$ m
, _* S4 u' T5 w$ h0 L% R1 z
try {
% _& f# k4 [$ ]' j1 g! z modelActions.createActionTo$message 4 o* B. u6 o2 ?- v3 ]( `1 T$ b N
(heat, new Selector (heat.getClass (), "updateLattice", false));' E" j, s3 x2 m3 U$ I. R
} catch (Exception e) {
: [; |6 b* L5 ?: k System.err.println("Exception updateLattice: " + e.getMessage ());/ I5 @0 t; Y7 D2 a& P
}
7 w7 ?; d" \" [ U + M$ C& D8 r" D3 n- m
// Then we create a schedule that executes the
* Y" ^. \5 K& r2 g5 N$ O0 c! c3 h4 A // modelActions. modelActions is an ActionGroup, by itself it _4 R0 R. R+ h; Z2 j& }
// has no notion of time. In order to have it executed in9 Y8 m( L+ {) t1 N8 R7 N8 R6 C
// time, we create a Schedule that says to use the
" w# o6 M' [ }0 y: }0 A+ [: m // modelActions ActionGroup at particular times. This; D; a! s& f' O5 M
// schedule has a repeat interval of 1, it will loop every
$ G# ^# L% N% l/ y- Q/ V! X) ` // time step. The action is executed at time 0 relative to
7 T; o* ^4 k% w) G. g. b // the beginning of the loop.( f) I. ^: W9 y. |& P8 O9 Z/ s
- F! U$ h' j) P+ o$ f5 u* w K
// This is a simple schedule, with only one action that is
9 o5 ?4 P' {6 J+ r/ S! Q/ H( {' E, L // just repeated every time. See jmousetrap for more: p% N: w2 X3 l- z% t0 I6 b
// complicated schedules.8 k# D; _& s% F+ f6 Y K
) V( f5 t/ _- s, B. s
modelSchedule = new ScheduleImpl (getZone (), 1);
/ b2 X5 ~" ?+ s1 {' ~- l modelSchedule.at$createAction (0, modelActions);8 ~- }. V+ @- ]7 V- K1 A) V3 f3 I
; V+ S* s. T+ n0 s; U! [* f+ y3 X
return this;1 e/ P) n. H1 |' q* ? l+ A
} |