HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, f& H8 l6 _, U( i) Q, o% \3 }0 t3 I
. s* R) M. P- I4 } public Object buildActions () {3 }! N2 |! E- t1 x# }1 ?; Y
super.buildActions();
9 h, M- D( Y' W3 v, h
, T& ^) n/ j" `, i // Create the list of simulation actions. We put these in1 ~8 R5 p2 S5 \1 b- \3 Q/ U
// an action group, because we want these actions to be
9 s5 S3 R* y: K9 x2 M W' ~8 d // executed in a specific order, but these steps should* L# |7 l7 F/ k7 Z
// take no (simulated) time. The M(foo) means "The message
/ _! k# y, u# p l. X // called <foo>". You can send a message To a particular
R. q/ d) J& M, q$ y // object, or ForEach object in a collection." S& H/ n3 c5 V7 g: x
0 A7 k1 b( F. P) j, Q& d( _ // Note we update the heatspace in two phases: first run
7 t8 |0 E! ?0 z. g4 N // diffusion, then run "updateWorld" to actually enact the
+ K! r( E$ [0 C3 A$ |+ \ // changes the heatbugs have made. The ordering here is9 W# ]& c( `, i2 e) O8 B
// significant!
* K5 e' u0 _$ | 2 g% Z; b% u. }7 d! D( E. o" \
// Note also, that with the additional
) ]* a0 h0 p+ q2 t4 { // `randomizeHeatbugUpdateOrder' Boolean flag we can
# p8 ~, G+ i8 E8 }2 L r" X5 t // randomize the order in which the bugs actually run- r, i0 N6 d) Y! q3 V
// their step rule. This has the effect of removing any
: @$ A0 N6 ~7 F. i( p& `) n# R- p // systematic bias in the iteration throught the heatbug
! q+ O4 O, [# c0 w // list from timestep to timestep* ~9 z& l' o' G9 [8 J
! h! L7 i2 T c$ W \
// By default, all `createActionForEach' modelActions have, h: B( ?$ _& C2 b" n; p$ k2 Q' V
// a default order of `Sequential', which means that the% _: N3 V, n; N1 H! W: @
// order of iteration through the `heatbugList' will be
2 L% P2 W- J( d7 N8 Y // identical (assuming the list order is not changed
1 ?2 s# ?+ f: I( k8 L8 w/ W // indirectly by some other process).
, M' ?5 ~ n' `! U \* z' k. R
* l/ \! g y. p" q modelActions = new ActionGroupImpl (getZone ());4 m$ t& ~0 A! ^: ~2 z
0 o2 p- U! X* s; V) [& Y! `
try {. m- ] c6 @7 E# v2 j, L
modelActions.createActionTo$message
% H. } X0 c) @+ W7 V (heat, new Selector (heat.getClass (), "stepRule", false));% Q) Y& Z- p: ~1 b3 F# Z q8 ^8 X
} catch (Exception e) {, U6 s! k' a+ |
System.err.println ("Exception stepRule: " + e.getMessage ());' y& w* @ {' k
}
' ~# a2 t/ v, t1 R1 C- ~7 U
4 b$ i+ n( I% H7 Q' E7 A9 v2 W try {
' L. U* B4 y, h- Y8 Y) g Heatbug proto = (Heatbug) heatbugList.get (0);# i; l) n- r# ^6 ]# k$ d
Selector sel = * Q7 `6 L2 T6 d9 `
new Selector (proto.getClass (), "heatbugStep", false);
$ ~6 u9 g4 A7 E( m7 d actionForEach =
* A, n- m8 {& | modelActions.createFActionForEachHomogeneous$call8 m3 o+ n1 a* g
(heatbugList,
9 i& `3 h1 X) t new FCallImpl (this, proto, sel,1 i( T, p" l% l8 Z
new FArgumentsImpl (this, sel)));
- [, N4 o% Y- G } catch (Exception e) {
: R; w. _ k$ D e.printStackTrace (System.err);
. i- A5 M* }4 b. m5 p }5 q, L4 b2 v7 W& J- n7 @, V1 ~
8 `+ W- r; u# C syncUpdateOrder ();( Y& v) C1 H& v, C8 V3 f
! x3 \: j/ t( R. [9 g* H
try {
J7 U$ V" @2 U* U9 n2 ^ modelActions.createActionTo$message ! B+ A; t. E5 v1 ?0 T/ w6 B; L
(heat, new Selector (heat.getClass (), "updateLattice", false));
& a0 K) T7 |. A! S9 A: S9 S } catch (Exception e) {
* e: G: i7 T* W* a- `! ]- }% _1 m System.err.println("Exception updateLattice: " + e.getMessage ());
1 J. H; N3 ~$ Y5 W: \! |1 B& B) ` }( T. l7 }8 r5 w3 Y. r
$ K8 {/ v" {8 e // Then we create a schedule that executes the
8 I$ ^( m( S& [ // modelActions. modelActions is an ActionGroup, by itself it B- c# ]3 z g9 ~
// has no notion of time. In order to have it executed in
$ S& r) y% v8 w ^* \( U // time, we create a Schedule that says to use the8 d& |! r0 D: S/ a
// modelActions ActionGroup at particular times. This2 ?) l5 I$ A% h$ Q
// schedule has a repeat interval of 1, it will loop every: Q$ ~5 g1 C% q2 e) T
// time step. The action is executed at time 0 relative to
: Q/ }- L6 J9 ?4 m& ~6 A) i) p // the beginning of the loop.
+ u/ \% J& F1 l+ \* q u& l4 A+ }, H$ O& T5 s
// This is a simple schedule, with only one action that is
' ` \$ z* O) L* v- y8 z, C7 d/ g // just repeated every time. See jmousetrap for more
" y6 s, }4 Q. _7 A // complicated schedules.
! x$ B; F# Z9 }# g/ w , u. V8 H) \; S
modelSchedule = new ScheduleImpl (getZone (), 1);4 L4 C& F! Q8 {4 U- t
modelSchedule.at$createAction (0, modelActions);2 s/ ^/ A( ~. v1 U
( v* _2 k6 z0 h1 {( p return this;
4 x0 A. S: A, x! p4 { } |