HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ W" @$ @1 d6 e; J! r ~; r8 X/ ?, _* |& V" K9 W! F
public Object buildActions () {, {) h' M4 \ f" ]; P& {" G' K
super.buildActions();% g; T1 O& {& }0 R1 K* ]
) Q/ N. W3 m& D
// Create the list of simulation actions. We put these in
0 H4 r+ ^5 ]! G/ Q/ b5 { // an action group, because we want these actions to be
0 s2 U9 R! ~* c // executed in a specific order, but these steps should/ a6 L; ]# K' K" G- A
// take no (simulated) time. The M(foo) means "The message/ a2 f+ b: U9 K3 ~5 H
// called <foo>". You can send a message To a particular7 j8 g+ Y; x3 M1 I8 m6 e3 s+ A: s
// object, or ForEach object in a collection.
" q# M# q/ s- [* y 9 v! W6 k- V; j3 k2 z" n
// Note we update the heatspace in two phases: first run
6 z( u* U1 ^' o2 o' r // diffusion, then run "updateWorld" to actually enact the
: t1 J) p8 q6 V/ I3 u7 I0 d // changes the heatbugs have made. The ordering here is
1 I3 \! s& o4 @& V, H7 F; {1 x* ?2 R // significant!
/ P- \. F; @. s! T, i+ Q
9 Z* P I' i; l2 U // Note also, that with the additional
. K1 B3 A$ A, a/ F" O // `randomizeHeatbugUpdateOrder' Boolean flag we can& R: u2 P7 A4 v4 E" x
// randomize the order in which the bugs actually run
% f3 L: N# M0 V4 w4 r( @" ^ // their step rule. This has the effect of removing any; i; I2 c" G# t0 q7 _ q
// systematic bias in the iteration throught the heatbug
. T% V6 y! l! k( o4 o // list from timestep to timestep
" D9 K @+ Z0 l4 x- U
8 n! @/ X* v# y, Y, X // By default, all `createActionForEach' modelActions have
2 S. a( Z: K9 p3 N7 r" w j3 g // a default order of `Sequential', which means that the
. m! d4 h' f( H0 t8 R; u! r // order of iteration through the `heatbugList' will be
6 a' ~0 U$ q+ ^; Q8 ^- |9 t // identical (assuming the list order is not changed
, j" h: P' @+ s H- |) q! w# I // indirectly by some other process).) C" t. w& p7 k2 J5 ?& J: g
8 R, Y& O5 [$ \; ~
modelActions = new ActionGroupImpl (getZone ());
3 @, z0 C4 w- H3 m* x* h7 Q
, |% e; q5 G# l: e# b1 A try {/ _0 x9 P6 i! A* _' Q5 z
modelActions.createActionTo$message) p4 |& U0 I& h0 e# `5 C
(heat, new Selector (heat.getClass (), "stepRule", false));7 R+ D! X' Y1 o3 J2 {4 s
} catch (Exception e) {
; T2 h2 R- }* ^* h. Y System.err.println ("Exception stepRule: " + e.getMessage ());4 k) o& v1 P9 h7 F# [
}! F6 v9 j7 s8 ]" J8 ^( D2 q
; Z0 ^" T# u) a2 [( N5 @+ H" v
try {& z2 T% c% r; |3 r4 P L* f( ?
Heatbug proto = (Heatbug) heatbugList.get (0);
. U# R$ i$ {) M- `0 {- H2 k Selector sel =
; I! ]9 `( h3 z0 Q! c O new Selector (proto.getClass (), "heatbugStep", false);
{% |6 t3 ?& y" ?* y" G actionForEach =
* [7 N8 l+ S: G- S, g. N# | modelActions.createFActionForEachHomogeneous$call6 D4 f* ]- `5 y8 l( _5 u
(heatbugList,; Z& R) u, m2 ] W( o/ b4 P2 R1 A
new FCallImpl (this, proto, sel,
/ f) f6 M7 Q7 J) y0 H- w6 e! D& N new FArgumentsImpl (this, sel)));$ Y1 i) H6 F1 e8 S4 B
} catch (Exception e) {
! @0 @% R6 L; Z e.printStackTrace (System.err);
) m. J* [2 @8 L+ Y }
. g; K/ @4 }- j+ I1 @( R6 x
, ~- T7 z. K" T" X syncUpdateOrder ();
- R; I3 ^0 P6 R+ e9 ?& ^, M
9 n8 t5 m1 P9 S3 Y, H& w7 ^ try {
4 ~* @+ P) Z8 j2 ] modelActions.createActionTo$message & x' p$ G/ D6 `, j) E
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ R' g* U5 I5 a" a& B& y } catch (Exception e) {( a0 e x3 c) e% t& X4 ^
System.err.println("Exception updateLattice: " + e.getMessage ());4 U2 r5 f; B' X! `4 S( g5 \; O
}) P6 f3 ^4 _- T( l$ J5 Y0 q
, g% \# b" j! r7 d
// Then we create a schedule that executes the4 ?8 V J8 O. E3 r/ e# |
// modelActions. modelActions is an ActionGroup, by itself it
: y8 r7 x8 S+ r' X- h // has no notion of time. In order to have it executed in. T7 A3 j2 v7 g+ J
// time, we create a Schedule that says to use the+ T. T% x+ l; |" e% B3 ~: v+ w7 T
// modelActions ActionGroup at particular times. This) |0 W# V- U8 p! b
// schedule has a repeat interval of 1, it will loop every2 G6 e$ p+ H& Y1 ~& ]' b3 e
// time step. The action is executed at time 0 relative to: g n" H! E4 r+ {( o( i$ @
// the beginning of the loop.
7 M) h* N) R, K9 }& p& p: }
4 P q# s, u4 _! |, T% K // This is a simple schedule, with only one action that is
" l1 D; o% z! J9 z; z) }* w // just repeated every time. See jmousetrap for more
3 b6 y* p L6 |# s // complicated schedules.
5 u, X1 G I; ^! D5 U 9 s# d `1 v& P6 h; \
modelSchedule = new ScheduleImpl (getZone (), 1);8 [7 `: G; E3 g6 j& u r3 P( }1 ^: a. ]
modelSchedule.at$createAction (0, modelActions);; f+ Y" B3 ~4 `7 b+ Q1 M
- Y/ \ t4 F1 P8 X+ A. X
return this;. |5 V9 d! p5 a4 x. s/ {: f/ Q
} |