HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# o7 ~- J% B0 O' e" V2 c
- E) y3 r( [. }' Q& o. x ? public Object buildActions () {/ Z: Z0 e, a% b3 ~
super.buildActions();
7 y* N! b' H% V" G) Y; z
% f5 Z% [1 u" x q // Create the list of simulation actions. We put these in% O- l$ u5 h) Z7 C' s! w7 h/ _& R' F
// an action group, because we want these actions to be- K+ j; m9 _& D7 ^ x
// executed in a specific order, but these steps should/ x+ {1 v& f/ A" H2 L. _. b
// take no (simulated) time. The M(foo) means "The message
6 w( t% L& _& j // called <foo>". You can send a message To a particular5 z3 C0 k) u: K. _* t) k+ D' V
// object, or ForEach object in a collection.
3 j# Q3 `: T0 W3 ~2 K, B
" |4 k* m/ U( r: s. i7 D& c // Note we update the heatspace in two phases: first run4 k9 b" J1 R8 x5 [' R
// diffusion, then run "updateWorld" to actually enact the
) L9 ], v+ c, c5 U- y: A // changes the heatbugs have made. The ordering here is
5 s/ J |4 `7 X9 h, b: z- e! G5 `% G // significant!6 e+ c' C# E s: `
6 R# f, W: a8 s" t1 ~% Z
// Note also, that with the additional6 V X" ~2 ~! f/ D2 D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" h5 p! r8 _# U3 n // randomize the order in which the bugs actually run
/ a+ a2 ?9 g% b! M7 P+ v // their step rule. This has the effect of removing any
3 X7 }6 g" x Q // systematic bias in the iteration throught the heatbug
* \: g0 S% \# f" {( K2 ? // list from timestep to timestep5 [( [# B# N$ m. J; T a
' u3 _) I* j# Q4 A
// By default, all `createActionForEach' modelActions have
/ ^5 g, K, X1 v7 _; J5 k) b% l8 E* @; @ // a default order of `Sequential', which means that the
) O( p6 }; m& M" g' o, ? // order of iteration through the `heatbugList' will be
, z" A) w/ d0 u! W! G9 x/ d8 D8 B+ i // identical (assuming the list order is not changed
8 {3 M6 H3 E( t$ i( _. U // indirectly by some other process).* }9 o5 G" D- X; {7 a
# w2 @0 k7 W8 s9 p: c; Q modelActions = new ActionGroupImpl (getZone ());
! y. _! Y9 X" X7 k
2 x* K( ?$ r$ c' L try {
2 p/ l D. _: H modelActions.createActionTo$message4 H1 p% P6 C$ G' k3 J! ?
(heat, new Selector (heat.getClass (), "stepRule", false));
- }0 _! ~( L$ L } catch (Exception e) {
8 r8 A* t3 e$ B# b9 B, M System.err.println ("Exception stepRule: " + e.getMessage ());& R8 S& a/ L8 _, y/ D2 Q) ^) e
}
, \ _/ A2 J: |3 P n
6 h1 H7 [ S$ g6 S \* k5 d+ l try {( W E6 G& Y% ^* F
Heatbug proto = (Heatbug) heatbugList.get (0);- W M5 p S& ~; _% d& P
Selector sel =
/ W" _1 x0 W8 j" r0 G& H new Selector (proto.getClass (), "heatbugStep", false);* J, f6 q8 o/ T
actionForEach =
' ^3 f5 L& ]2 d) K- E& h; A modelActions.createFActionForEachHomogeneous$call
+ ?: J$ G$ T& R% r$ e (heatbugList,( P2 l @& \$ v0 J
new FCallImpl (this, proto, sel,3 e9 h( X2 h# n
new FArgumentsImpl (this, sel)));8 @! {% p0 i0 w a' S6 l" b O3 ^
} catch (Exception e) {
# }; ?; O- m1 g _4 g e.printStackTrace (System.err);2 E5 F1 `- O9 N/ `/ a3 U
}
/ v! c, _3 P& r& a; N4 E 1 n% X4 f& y5 Y4 g. k7 T. p% @* I
syncUpdateOrder ();
6 b+ u7 N2 @* s; j8 S) ]) ?% L
try {
; v, |9 l& V8 [5 J% c: F; O/ E+ r modelActions.createActionTo$message 1 h. ]' @# U' N9 _2 Y: V5 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
) S2 V% ]' D7 Y0 l1 V } catch (Exception e) {/ `8 X# h% P! ~3 x% W
System.err.println("Exception updateLattice: " + e.getMessage ());* F3 y, b- \2 u: `
}
9 \. Y( }! |/ `. J" } 3 ^$ J. K5 T# ^9 \8 k* G2 s+ o) Z
// Then we create a schedule that executes the
8 e z+ w# a% `4 ?' b3 Y // modelActions. modelActions is an ActionGroup, by itself it0 G9 e; R# r* I. e; J$ G
// has no notion of time. In order to have it executed in. R3 q- L w) t/ y0 J/ F
// time, we create a Schedule that says to use the
9 E1 d0 |& v6 R9 v2 f9 {! V5 N; M! Z // modelActions ActionGroup at particular times. This
5 a% A3 Y7 G! j // schedule has a repeat interval of 1, it will loop every' c7 K# e4 C- S4 ~, G
// time step. The action is executed at time 0 relative to
: J" {+ E- T5 c A w J/ |- a // the beginning of the loop.
" Z r& P& o+ P! ~5 q6 n. z, R z# K3 _6 T( {1 ?" D
// This is a simple schedule, with only one action that is+ d1 i ~' U. E. ~$ v2 l: A
// just repeated every time. See jmousetrap for more/ V! \- N- O$ h
// complicated schedules.! K# }2 b! R/ p8 {# K J! G
* d% j& J( C; K2 Y
modelSchedule = new ScheduleImpl (getZone (), 1);
9 P9 A5 ?, y. v% u% m modelSchedule.at$createAction (0, modelActions);
4 Q: j- |" D$ G 7 o$ C, X' j5 g5 c! R# r. W+ f
return this;2 G0 R3 h9 F- P/ ?0 F$ E( w
} |