HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' g2 {$ S' G5 {6 i4 Y2 F
, o. s; A6 `9 x4 G- R& _ public Object buildActions () {
% i& S# \ L% `. A5 G, o super.buildActions();, t8 U; |' h: m2 P
" Y2 r$ ^( h# q" n+ n+ n
// Create the list of simulation actions. We put these in+ I# H* a) P. ~: o! k/ Q2 Q
// an action group, because we want these actions to be
7 x+ ?3 N6 O. v' { // executed in a specific order, but these steps should
( K6 L1 Q, ?2 }4 u4 l3 ]. Z% c" I6 ~ // take no (simulated) time. The M(foo) means "The message
1 A5 F) H1 e. ^: Z; v+ M4 K // called <foo>". You can send a message To a particular
" G' l4 @- {5 j& a: b6 ?/ {8 P // object, or ForEach object in a collection.
2 L. ~5 Z: i. z/ s7 q: u
. ^: w/ P3 C3 b5 G/ V // Note we update the heatspace in two phases: first run
+ b6 e) w: [2 y9 w E+ U2 @ // diffusion, then run "updateWorld" to actually enact the
! R5 v# h1 i- G9 _/ _ // changes the heatbugs have made. The ordering here is' L0 l- N7 H0 d( P, b/ c/ V: l
// significant!
9 a6 @: l1 E- p8 F" q) l; d 3 v3 I1 ?& q; n7 `) P
// Note also, that with the additional( `' y: E* ^- N, r7 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 |! O# e3 A: B
// randomize the order in which the bugs actually run
% O& }/ [' ^) q$ D // their step rule. This has the effect of removing any
9 V+ M. d* O% V. o/ v7 r0 Y3 P3 x // systematic bias in the iteration throught the heatbug
5 m6 E) Z4 c- b% k4 c8 Y; i // list from timestep to timestep# W* d- r: q4 S
) C2 _9 m" `! v // By default, all `createActionForEach' modelActions have
& Z" u, r" d' c3 k5 _) @ // a default order of `Sequential', which means that the) I& N n9 g8 L
// order of iteration through the `heatbugList' will be) A5 @: c; Y! t* ^6 W/ I
// identical (assuming the list order is not changed4 V' o1 c' {8 {" |. j
// indirectly by some other process).
) Z$ b0 ^; d% s0 S
5 F" B& s, A( }; w modelActions = new ActionGroupImpl (getZone ());
5 L* s1 n; t& v$ C4 B i
' w$ r; j% b8 c, Z try {& `) p) V$ o1 x# v2 R: ^2 c" c; F+ H
modelActions.createActionTo$message
* N# @: |/ c- u: @- P (heat, new Selector (heat.getClass (), "stepRule", false));
& Z! u( R# K( s3 M3 f# k8 F } catch (Exception e) {
& ~: S: \. ?2 X# K System.err.println ("Exception stepRule: " + e.getMessage ());
/ _2 o5 D# r6 d5 x }
, ?( g1 b) ]2 G$ ^( ]4 ]- d6 S6 V# I# j T) R# J* x2 ^
try {
* n7 D# Q8 R# s4 S Heatbug proto = (Heatbug) heatbugList.get (0);
# i3 T5 W$ a+ T9 l: K Selector sel =
! K' C5 _3 U3 q1 ]& h4 C new Selector (proto.getClass (), "heatbugStep", false);
* M2 ^4 n% b1 J actionForEach =
% @" x8 ]' j5 v% | modelActions.createFActionForEachHomogeneous$call6 n2 y/ Z/ m4 N
(heatbugList,7 W8 W) A6 ]( O ~; ^/ g
new FCallImpl (this, proto, sel,
% N8 ~9 s* Q P! T# r @ new FArgumentsImpl (this, sel)));
2 }6 m3 c/ h( n: u4 ?' n( b } catch (Exception e) {2 f; Y+ b, H5 h$ ^
e.printStackTrace (System.err);% a4 ^# k( D+ _9 I
}' p/ Z4 C: ]( N# u: [1 `
' f5 `- a1 {# W+ t syncUpdateOrder ();, p z$ {6 f; V7 L. l. T* k
4 v4 s2 @$ i4 V3 V5 @9 W1 q
try {9 }) E. y1 f+ B# q3 T. I
modelActions.createActionTo$message & T! J l# X, v3 @. y! D( a2 }
(heat, new Selector (heat.getClass (), "updateLattice", false));3 p0 h# \) m s3 R l, C
} catch (Exception e) {
5 H+ Y. y) ?" G7 g System.err.println("Exception updateLattice: " + e.getMessage ());
6 K& r5 Y5 g/ N! a3 ]# b. { }; t" _$ B. E1 Y0 s2 q
/ R L, o* g# i* M8 D, w2 G // Then we create a schedule that executes the) Z0 M0 R, ?/ |
// modelActions. modelActions is an ActionGroup, by itself it7 j& A" p" D. K; B6 K
// has no notion of time. In order to have it executed in" N) k4 X. C7 ~& }
// time, we create a Schedule that says to use the8 o( J3 {/ s6 W2 l' C
// modelActions ActionGroup at particular times. This
% V9 g# u7 A* e4 x. [& j4 ` | // schedule has a repeat interval of 1, it will loop every4 P2 ? q0 n; h$ |
// time step. The action is executed at time 0 relative to% d9 A O3 E9 K4 Z
// the beginning of the loop.1 U" ~' q6 u0 A; g. n
" T$ j0 y0 U# s5 Q' ?+ H W
// This is a simple schedule, with only one action that is
( E1 n, Y" V9 T // just repeated every time. See jmousetrap for more
7 n! j: o L- y( ] // complicated schedules.
! ^, K6 M* v6 P# O$ a0 u
* s) }" Y: ?' X8 G modelSchedule = new ScheduleImpl (getZone (), 1); Y3 Z; R7 q) x1 A' x6 U% Y4 {
modelSchedule.at$createAction (0, modelActions);
& R( N: A# K8 v# {3 R 9 g7 C/ W! |3 w* m2 U
return this;
8 |9 h# c4 o+ g$ } } |