HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 u- c/ Y; p/ A( D( o* A+ d$ z* Y* o6 ^6 }6 |$ e1 G
public Object buildActions () {
- n% h& G! T' y, J7 y" G super.buildActions();" g/ ]$ R H7 \+ z
5 J2 a6 T* a7 e9 ?7 e0 i
// Create the list of simulation actions. We put these in( L/ v. r; Y7 B4 t
// an action group, because we want these actions to be
- U8 N3 k) ~& O3 A1 C // executed in a specific order, but these steps should
+ Z6 g9 h3 d1 p0 u // take no (simulated) time. The M(foo) means "The message
5 A* k6 A2 Z$ ` // called <foo>". You can send a message To a particular1 u( B2 d$ Z2 k u- a3 v( ]
// object, or ForEach object in a collection.+ @- }5 L3 i. ~/ G& }
5 Q& I% V3 b' { // Note we update the heatspace in two phases: first run
/ U/ X' z7 V0 h1 B // diffusion, then run "updateWorld" to actually enact the) K3 P' e; Z4 F0 \
// changes the heatbugs have made. The ordering here is
+ X4 b# B. D" P- y$ d // significant!
1 v: S# ^5 M$ o+ m+ ~2 L
& h! i! C# o8 Z) G6 Q$ z( l! T5 [ // Note also, that with the additional
' K' l* B+ H: W4 w T, H% m0 \ // `randomizeHeatbugUpdateOrder' Boolean flag we can
; {5 m7 S) O4 _" Y // randomize the order in which the bugs actually run
7 m4 n" H( B( m" z1 y" V // their step rule. This has the effect of removing any
, R7 w; d, ^" |5 o5 w // systematic bias in the iteration throught the heatbug
1 }5 ^7 K) O" y) a2 F5 Y5 Y( ?! d // list from timestep to timestep
6 i+ z5 C0 B/ ~- T9 |; i7 ? 5 ?) ^, \3 i) u, t- g
// By default, all `createActionForEach' modelActions have
0 e! c+ p7 I2 ~% \ // a default order of `Sequential', which means that the
! |6 v2 n# W, w/ s/ |) j+ N // order of iteration through the `heatbugList' will be8 j- E9 i- |8 L4 k+ l( Y$ S/ K I
// identical (assuming the list order is not changed
; Z( O$ f! j1 {' L" r$ F" P // indirectly by some other process).
F. l3 @2 `" b" U8 C + K, v! H& u$ {/ _
modelActions = new ActionGroupImpl (getZone ());! @* R% r: z5 @9 M( c
" W) _0 g( |! ?9 j* M# R4 I try {5 G: x% g* u% A0 d5 a
modelActions.createActionTo$message6 F6 m' m: E5 E# [9 D9 o0 \: v
(heat, new Selector (heat.getClass (), "stepRule", false));
, T: d' T7 u* ~# E% J$ B! k } catch (Exception e) {. C/ Z! I6 z5 P2 n) X
System.err.println ("Exception stepRule: " + e.getMessage ());
8 ?8 q Z/ n; k, R1 p2 v5 H }% h9 T6 h( {( f# k# ^" Q, ~
- M' y0 p5 f4 P! J9 | try {& m# q+ Z" m( W) L( s/ a& a
Heatbug proto = (Heatbug) heatbugList.get (0);" x5 D# b$ d0 s# O+ r- q! v
Selector sel =
7 n0 O6 f( \' D: ~' n' ] new Selector (proto.getClass (), "heatbugStep", false);
|8 ^" z8 S$ F& R: I1 ]" { actionForEach =) X6 h D1 S4 \' i1 j
modelActions.createFActionForEachHomogeneous$call
8 o% ]2 Y& C* `9 l& V5 [6 p (heatbugList,
2 p9 m( e: g @7 K; \9 H new FCallImpl (this, proto, sel,+ j2 g+ A6 X/ Z1 b; q$ Z9 ]
new FArgumentsImpl (this, sel)));* Q: w, T. v0 r# p* P
} catch (Exception e) {1 T/ J3 s n* l) r; g$ N
e.printStackTrace (System.err);
1 J* W3 [' Y) m5 E; F, `+ a4 ` }' o, O7 u6 u/ G; v
9 l; s) f3 ]/ D7 A$ x3 p. Z; q
syncUpdateOrder ();
6 B" E! @8 k) t5 B: |% @* J2 G* J2 }
try {; i' }6 h+ D8 t) l8 ~) E. l' h
modelActions.createActionTo$message
% _% C3 y6 l- d0 D5 Y" l (heat, new Selector (heat.getClass (), "updateLattice", false));# u! Z. A ^. {" m* Q4 O! A7 \$ W
} catch (Exception e) {& m7 L# u$ D M9 Y1 T* U. Q
System.err.println("Exception updateLattice: " + e.getMessage ());0 M( r6 M/ L% R* S
}, |6 o2 u O* @0 V1 E' F
7 n* a7 V2 m8 H // Then we create a schedule that executes the
1 l0 c, K- T3 V+ I9 L // modelActions. modelActions is an ActionGroup, by itself it
6 k+ J1 [. A, T( b: K4 m# u- r // has no notion of time. In order to have it executed in
4 K5 ^8 u$ X1 A f // time, we create a Schedule that says to use the' K0 N1 d+ h" q: }- a
// modelActions ActionGroup at particular times. This G) P/ ~4 T' A
// schedule has a repeat interval of 1, it will loop every
! v8 q* @: s: g6 G: c) a% R // time step. The action is executed at time 0 relative to
4 T# X/ B( i% q$ ] // the beginning of the loop.
- g" ~2 P* W: ?! Q. L2 w5 B
3 |5 @. y, X2 H // This is a simple schedule, with only one action that is# C- I2 m+ E0 G2 z: P
// just repeated every time. See jmousetrap for more
. h7 T; }* ?1 b* M! P0 @( p // complicated schedules./ P$ C+ s D4 i. r( t- R1 ^
/ _9 L; B" F4 V+ P/ V1 K) ]9 D7 p: _ modelSchedule = new ScheduleImpl (getZone (), 1);
: P, q1 h# y% O- K4 {/ |( d modelSchedule.at$createAction (0, modelActions);
5 u4 ^( G; v2 \: c3 b1 w% ?) s
) V( i/ e3 W+ {! y$ `" G7 p0 b' o9 B return this;
) S& h# I$ x t! Y' a( z } |