HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& P/ _) W/ }0 T: s4 K7 M8 I- f( D2 i) B6 O
public Object buildActions () {' n5 |& [7 S( ?; c; ^+ ~5 j" v9 G5 C/ t
super.buildActions();
3 | c0 Y4 H; h. {) T ) f+ N: ^) I# [; U7 h$ @" M' g
// Create the list of simulation actions. We put these in7 i' l, C5 [0 a) h- L- x) p+ x
// an action group, because we want these actions to be
' z/ ]4 T' r% \, v c$ l9 t+ v' \$ g // executed in a specific order, but these steps should) d! f, d* z5 _" c0 ?* Y) i
// take no (simulated) time. The M(foo) means "The message6 h$ A/ @6 y9 Y n) E. d G( y
// called <foo>". You can send a message To a particular% q) N& X; y6 y: u- F
// object, or ForEach object in a collection.
5 _% W; Z) e1 U
: Y7 ]& I5 P3 s- Q. U' G+ G& _# I // Note we update the heatspace in two phases: first run9 G6 g/ X* k$ I$ l. F% y1 {, M
// diffusion, then run "updateWorld" to actually enact the7 |# V# g( b- S* d: b/ w
// changes the heatbugs have made. The ordering here is
& C5 |' ]) w0 v // significant!9 [! v4 t6 [/ I5 m
. ?6 Q7 t0 L& A // Note also, that with the additional
8 d0 `" u: e- R: } // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 O" v$ ^3 ?) W$ z0 G // randomize the order in which the bugs actually run
' p0 Y9 K; P- Q5 y2 G% ?/ b; h // their step rule. This has the effect of removing any
' T( K, l% c6 ~3 Y( {6 s6 l! U // systematic bias in the iteration throught the heatbug
8 J+ J3 {# D/ K# m& `% K // list from timestep to timestep: B2 v0 X9 j9 Q3 A" b: z8 L' u f
: d4 p( @# K0 D, W0 [: b" A // By default, all `createActionForEach' modelActions have
( [$ }& V5 \, G$ p% d- n // a default order of `Sequential', which means that the
2 X R" B! l3 D: |: b2 `9 S // order of iteration through the `heatbugList' will be8 o9 K( F; T1 [" _9 g8 |9 r
// identical (assuming the list order is not changed7 @# h s3 x8 _; a" H) q7 Z
// indirectly by some other process).
' y# E3 F0 M' p
& v, f6 g' S% Z" e modelActions = new ActionGroupImpl (getZone ());
. W$ E, a0 t# b- ^6 L
" u/ Y/ B9 r0 p+ M( z try { O6 u# T# L* O. `: d
modelActions.createActionTo$message9 K. |3 C2 t) N' B
(heat, new Selector (heat.getClass (), "stepRule", false));
2 Z# h5 }8 ]1 P( J& s1 q# C0 M8 I } catch (Exception e) {* h' [ g( Y4 ]9 a/ o! E
System.err.println ("Exception stepRule: " + e.getMessage ());/ f; u, T# \7 r8 y1 R& s0 S3 y1 z9 }
}. A# K6 ~4 ]' F2 @
& P' ^( ~5 g; I% _4 p try {
% E4 t' p6 A3 d- Y6 l% O Heatbug proto = (Heatbug) heatbugList.get (0);
: o9 p* h4 e. G+ c# W Selector sel = % j# A, e- ~+ j9 B# c
new Selector (proto.getClass (), "heatbugStep", false);
& |: p2 H) g& a& s" e actionForEach =
3 x8 i# [& j/ _) n modelActions.createFActionForEachHomogeneous$call5 B P) o0 U8 Y4 W! {8 [+ J+ V
(heatbugList,
/ { w3 ]1 z. q new FCallImpl (this, proto, sel,
- \: R+ B: b/ F6 R w- l' G. f9 A new FArgumentsImpl (this, sel)));- W7 g- p W8 d& k3 U' k" ]
} catch (Exception e) {* K$ A$ M+ F; o2 p
e.printStackTrace (System.err);% t# j5 x9 _( m( D4 U4 y0 R
} S [1 J" \7 X& n1 X, n3 }3 G
8 C j0 |! J& M' b, ?# I/ b! f
syncUpdateOrder ();8 a2 t6 m- p0 @) ` u
' Z* ~' z# S' n$ c; Z) \
try {, T* R7 |) O! u: V) o; r+ X
modelActions.createActionTo$message / Q1 m' D% G; @' N' }: e1 U
(heat, new Selector (heat.getClass (), "updateLattice", false));4 t) n2 A- k5 t9 |% B5 b
} catch (Exception e) {/ L* f8 g; U2 X+ Y0 Q4 p% H
System.err.println("Exception updateLattice: " + e.getMessage ());* _4 k6 Y% [( V3 H# W
}; u, g) i7 ~; @, |- ~
* C+ C) N' T- j! @ V
// Then we create a schedule that executes the
1 h6 h, x; H6 |" ^. m# f6 S // modelActions. modelActions is an ActionGroup, by itself it' c6 D. n( l$ _3 B, q
// has no notion of time. In order to have it executed in
2 g8 q# I% X9 o z) q5 B // time, we create a Schedule that says to use the: T: w4 I2 d5 O
// modelActions ActionGroup at particular times. This' v, f" Z# Q( Z0 W; y' U2 G
// schedule has a repeat interval of 1, it will loop every
) \$ w/ ?" V' U2 W1 {% [% h/ a) t // time step. The action is executed at time 0 relative to" @" K A4 K/ |1 B: Z4 R9 ^3 [
// the beginning of the loop.6 b7 c$ ]: m* {" ^& s' l
4 _$ U+ w- {" @0 g // This is a simple schedule, with only one action that is0 g9 i4 k1 A% U0 p8 L6 q7 n
// just repeated every time. See jmousetrap for more0 Y6 p/ @" [& I# |7 x6 R6 P D
// complicated schedules.7 Z/ b1 H3 M& @+ i5 `* j' }* k/ D6 I
% e5 h9 R3 J5 \/ m3 o
modelSchedule = new ScheduleImpl (getZone (), 1);, S* }: ?2 Y2 \8 b
modelSchedule.at$createAction (0, modelActions);
, O1 f! O$ k9 `' ^9 v 7 m+ @# f h& V2 H, D) N% c- ]
return this;: _" E' t3 C. A; }7 z( O- @# l
} |