HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( Q6 G! H! y c7 H8 ?' l
0 _6 `/ L2 f5 l# `% [/ P# y# Y5 l public Object buildActions () {$ i& g- z. l$ V4 L; k
super.buildActions();
* r- S$ {9 l; f. s1 T! s; D + t% a4 J$ ?3 M; ~! l/ t
// Create the list of simulation actions. We put these in
" v4 w7 R- i$ z( q // an action group, because we want these actions to be6 U2 ]# c2 q' l: l( R9 A
// executed in a specific order, but these steps should
& g$ l @/ Y4 \. M6 P // take no (simulated) time. The M(foo) means "The message
7 y* a; ]! q7 x // called <foo>". You can send a message To a particular" p; v3 u" h5 L# f9 D5 V9 D
// object, or ForEach object in a collection.
; h7 M) X8 ~ c3 e! z 0 C; ~0 o& }6 g! ]
// Note we update the heatspace in two phases: first run% ?( {! P+ Y) U( l! U6 j8 Z
// diffusion, then run "updateWorld" to actually enact the9 {/ B: H+ V' z9 W
// changes the heatbugs have made. The ordering here is
{. R, V s- Z: O) M" A) C // significant!
. q6 n% k" E2 @
% s! w# O6 c5 W+ n: V // Note also, that with the additional
9 p+ M Q7 a7 p" n6 q2 T) [0 ?/ K // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 N5 K# l; B( t* K // randomize the order in which the bugs actually run- d$ C9 w2 [. T
// their step rule. This has the effect of removing any3 l# ?6 @2 V* O
// systematic bias in the iteration throught the heatbug+ G7 m) D% O+ p7 H. P
// list from timestep to timestep
! G; V3 G: K% U% p, {. }# `+ l2 a , x+ n( u- v6 Q1 l5 B# ?2 [
// By default, all `createActionForEach' modelActions have4 B: D' R% K' p+ g2 O
// a default order of `Sequential', which means that the
4 g' U" Q2 A0 x8 i // order of iteration through the `heatbugList' will be3 m. J( D& S' I% P
// identical (assuming the list order is not changed
, F; H" i- B0 q# ^ // indirectly by some other process).
" F: T/ T) e; O! f4 @: ^ ( j4 x, f' ]* p0 b( ^$ H% r
modelActions = new ActionGroupImpl (getZone ());4 r3 [+ n1 r* F, |0 L& C
7 L& Q% _5 Q. j
try {
6 r+ N/ }; p: Q" H8 A( A modelActions.createActionTo$message
- R$ ?' w( T' M" { E( u (heat, new Selector (heat.getClass (), "stepRule", false));+ Z4 x0 m( d/ Q# |9 e! j0 L$ I1 [
} catch (Exception e) {
; F* f& E# l- B" f: A$ D System.err.println ("Exception stepRule: " + e.getMessage ());
( a. C( s# @. U }
* H7 p9 \+ p; q/ y' j" m% b
4 l, `" h9 w8 ]2 j% k8 B try {
, c8 E2 a8 z. L: ]# Y1 g& q- Q Heatbug proto = (Heatbug) heatbugList.get (0); d, g7 }1 v- J( W: V3 s& W
Selector sel =
2 a! i1 g/ O# ?1 t2 f2 ` new Selector (proto.getClass (), "heatbugStep", false);' x* W ]1 z" H0 L7 `9 p
actionForEach =7 k1 I; {2 p% A, z' |; ~4 w
modelActions.createFActionForEachHomogeneous$call
) Y3 x; O# W+ m8 I! v. h r* O1 ]+ o (heatbugList,
l3 C- K4 A0 \2 S& M new FCallImpl (this, proto, sel,' b Y& s" C) M: w, A; C2 h- F
new FArgumentsImpl (this, sel)));1 v4 \% C0 ?, m& W1 V
} catch (Exception e) {
9 u4 d1 O0 J& f# s; z# r e.printStackTrace (System.err);% C, P+ Q0 O$ n- B& c0 G
}
: E8 `: C0 z: ]8 c2 B/ V
3 q! m1 |& G% o2 ]4 O syncUpdateOrder ();
6 v9 F* W' W, t k/ Q( \
/ l( `- d( S% ^! M( Z try {) ?0 f0 y( e( ]9 |9 N
modelActions.createActionTo$message 0 o& f: \+ L+ t" {/ I; A
(heat, new Selector (heat.getClass (), "updateLattice", false));7 x% N7 `% p% T F; k [
} catch (Exception e) {
* e' _3 _! [9 Y; s- X& z& @. u System.err.println("Exception updateLattice: " + e.getMessage ());
" B# M$ [" N: M6 W9 P }4 d5 A# b7 W/ y
" k+ x* r/ V' Q* ]" P3 J
// Then we create a schedule that executes the: U/ L/ Y" ^# Y% v& H3 B4 Y& |/ H
// modelActions. modelActions is an ActionGroup, by itself it
# [7 g, b* ?! a // has no notion of time. In order to have it executed in
- {1 r: h7 m% r# U! W4 S: w" Y // time, we create a Schedule that says to use the& E: ?- Q, m. W" d
// modelActions ActionGroup at particular times. This
+ Q* \# _9 b% }0 W // schedule has a repeat interval of 1, it will loop every
$ I- k W/ N+ R$ [# b. e // time step. The action is executed at time 0 relative to8 C# q; g* [# c3 ^. W. ^
// the beginning of the loop.& O) v+ S: M/ |5 k& `
4 D- P# X2 u/ z! g
// This is a simple schedule, with only one action that is
* `( P( S# ?" s0 c3 m // just repeated every time. See jmousetrap for more$ O5 M/ b/ ?+ U7 W( v7 ~7 t
// complicated schedules./ T3 M I8 m; P% a5 G+ k* u
# c% [6 Q0 d6 f0 o: X0 Q6 ] modelSchedule = new ScheduleImpl (getZone (), 1);
3 \' h; N' a" N( O/ F# r7 k modelSchedule.at$createAction (0, modelActions);) T) r4 _! N" O8 o8 n1 T
) P. j6 d# z& Y+ @0 J
return this;
; I9 z* M! F* ?! m4 g8 ~% s } |