HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# }) l6 ^0 q* }- P( N) g3 s
; h/ m$ I& F/ B5 u public Object buildActions () {
; ?. V+ H# m5 T super.buildActions();
- G6 Q& @: c, `. w8 T& V
0 K2 J9 s; w5 |% w$ K+ }) C // Create the list of simulation actions. We put these in4 h, T- E- b( O2 l# V
// an action group, because we want these actions to be
4 `- }' H) K3 _ // executed in a specific order, but these steps should# r b% ]0 ~9 f) L6 o/ g3 C+ d
// take no (simulated) time. The M(foo) means "The message! R" s% c& P# l) \" q" C
// called <foo>". You can send a message To a particular- W1 v) e$ u5 ~& h/ Y' @9 j9 x
// object, or ForEach object in a collection.
, Z7 \$ R% ~* G# S
' P& t6 u0 S( S6 [2 U# j p { // Note we update the heatspace in two phases: first run% k4 x) {# B0 U5 v
// diffusion, then run "updateWorld" to actually enact the0 {$ w2 [% l+ L4 h% |& d& |& N$ ~- S
// changes the heatbugs have made. The ordering here is
% o( w2 f9 L7 Q1 q1 U0 E // significant!; m* R( ~( C; K. B
& n6 @# B* g) }/ j5 O$ V( ]+ t N
// Note also, that with the additional
3 k6 L; `5 i' k( {1 G // `randomizeHeatbugUpdateOrder' Boolean flag we can
( J( w) q0 [( J" R6 R% ] // randomize the order in which the bugs actually run
! t3 V9 |! @2 m+ |; S0 s // their step rule. This has the effect of removing any
; b4 K5 \- G3 N( a! }) k5 ] // systematic bias in the iteration throught the heatbug, p5 e- N( u6 ], Q7 f7 w% l
// list from timestep to timestep. d+ P" A' C3 ]5 O
6 E: ]4 K4 _+ a) t4 g! z7 L6 @: H: A
// By default, all `createActionForEach' modelActions have
3 e% U% W( [' C9 K q+ } // a default order of `Sequential', which means that the# a, Y- C' S" w/ D1 M
// order of iteration through the `heatbugList' will be
* V7 z h; ?, j4 @ // identical (assuming the list order is not changed8 ?& _. j, H! H$ Y
// indirectly by some other process)." _1 u: h) l# }; v S g: w" z( @" g
5 D# W3 T! y0 O- n- [) O H) l% R modelActions = new ActionGroupImpl (getZone ());
3 ]) e+ C' r- u2 H* r3 `7 y- g6 G+ r3 `' V
try {& j* t" u" p+ r8 d% @/ @% ]& q4 N
modelActions.createActionTo$message
2 U0 H$ v h3 E7 J& @, r (heat, new Selector (heat.getClass (), "stepRule", false));( f% G5 v& O. B2 U$ f, i: _
} catch (Exception e) {
1 X5 L; X7 x2 {1 A. S2 x4 n0 G System.err.println ("Exception stepRule: " + e.getMessage ());
, L( J" s; B% A; S( g }1 m3 A: w: H/ O g+ k2 D3 F
3 f, r& V9 w* c% r6 ~
try {
9 t' ~6 f9 }! @; Z Heatbug proto = (Heatbug) heatbugList.get (0);
4 B. l* X. N0 h1 E2 P Selector sel =
) i0 S0 b# F) \$ [. A3 h4 Q; Q new Selector (proto.getClass (), "heatbugStep", false);9 |) }. b/ H% k' t" Y4 [; @' H
actionForEach =
2 p3 N c+ s7 ?) J" k8 m' D modelActions.createFActionForEachHomogeneous$call
9 M+ ^/ e, S" n6 U1 V5 W (heatbugList,
1 D4 H: I3 u7 }& V new FCallImpl (this, proto, sel,
! g- A' f5 C( h9 \ new FArgumentsImpl (this, sel)));
" T8 w: O3 V* Y6 g0 s } catch (Exception e) {/ O. p$ l( M, @4 S& ] c# N1 P' @2 T
e.printStackTrace (System.err);; `3 O( O1 X% l& v
}
4 S% G" B1 D) b8 o, P& X P
) H8 R) E1 F: w. i syncUpdateOrder ();
: |- c4 \4 }: ~& h- P/ f) I
* H k; w% ^7 K# o try {( y5 P4 A/ _* _" l1 b
modelActions.createActionTo$message 3 v- i' |+ V; b/ R
(heat, new Selector (heat.getClass (), "updateLattice", false));
- y4 h; E8 c O% `+ Q P0 M } catch (Exception e) { }2 z3 j; ~2 P! n! ?! N
System.err.println("Exception updateLattice: " + e.getMessage ());0 C: ?: |$ R3 E; t
}$ z0 l$ T+ S8 W6 G; v
# F8 y* W5 l' D1 C5 r2 o. U/ w4 o
// Then we create a schedule that executes the
" H7 X" m1 H7 K: a. T) J // modelActions. modelActions is an ActionGroup, by itself it
: v* K+ _* e! b2 ~+ M4 r ]- [$ l // has no notion of time. In order to have it executed in7 X( X% d2 W" }/ ^8 c; \" c2 x
// time, we create a Schedule that says to use the) S1 Q# C( y( m1 X
// modelActions ActionGroup at particular times. This
, q+ s' b( L/ J" I // schedule has a repeat interval of 1, it will loop every% E P+ O. B4 Y3 v& Z" R5 r
// time step. The action is executed at time 0 relative to* U8 ]2 V0 [/ I/ x w) l: h
// the beginning of the loop.* g2 P% H$ ]$ b
& [3 v d% q# [: z x // This is a simple schedule, with only one action that is7 f! G5 U' n; z% c
// just repeated every time. See jmousetrap for more% J2 `3 J* z6 o& Q E
// complicated schedules.
0 }+ z7 [& X2 l$ _
5 N# p, V$ B- H4 p modelSchedule = new ScheduleImpl (getZone (), 1);
7 D. U) l$ a: U% _ modelSchedule.at$createAction (0, modelActions);$ U6 Y' O l( V
: E/ u/ }, y( o2 y
return this;8 o8 v. E2 L. V ?( i8 E
} |