HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 u: `# j2 c r) Y& j
1 |* C# l* U. _! o# {6 |6 E
public Object buildActions () {$ q" i% k/ b1 P1 |. ~3 Z/ C
super.buildActions();' v2 P- P" K, U6 V- i
& f, p7 \3 V* t2 ^ Z; J // Create the list of simulation actions. We put these in
% I: a$ H" i& l! D // an action group, because we want these actions to be
0 E' g f9 o m% G r l // executed in a specific order, but these steps should( q% X& h" ^2 z6 W8 C* ~, \- x) R7 Q
// take no (simulated) time. The M(foo) means "The message
- M- G, w+ i, B! y. z3 o9 [( g // called <foo>". You can send a message To a particular4 W! R4 G" E# ?6 O' G; l0 a. P g
// object, or ForEach object in a collection.+ \1 }" D, {- ?" W% `0 r9 {
, a6 G! G4 U/ ~$ G6 o! b
// Note we update the heatspace in two phases: first run
3 e* U; v2 z6 X3 w" z: Z // diffusion, then run "updateWorld" to actually enact the' R _" P2 b+ U. Z
// changes the heatbugs have made. The ordering here is% z/ x! b8 R5 W8 B9 s
// significant!+ X. q( [: ~3 Q8 c
2 ?' i. C+ d: ~4 T/ ?- i, N* R) p
// Note also, that with the additional
! a5 V# d! G0 H0 g // `randomizeHeatbugUpdateOrder' Boolean flag we can
* A& z' n% g3 Z, i/ F // randomize the order in which the bugs actually run( y# Z. s4 o5 ? A0 o
// their step rule. This has the effect of removing any; w" [- I) l5 p. y0 _
// systematic bias in the iteration throught the heatbug
' L% o e- L% d Z" a/ [ // list from timestep to timestep
9 h( x5 U5 f, w# @, O
) n) {3 m6 h# a // By default, all `createActionForEach' modelActions have
9 v9 {+ X; m6 q# ?* Y6 F4 t7 u0 S // a default order of `Sequential', which means that the1 @+ J8 {( F9 G& A3 ?0 k9 y
// order of iteration through the `heatbugList' will be
+ n, {6 G4 u! [# l a: N! b4 n& \ // identical (assuming the list order is not changed& \& ]: [, c5 v: J0 [; ?4 X
// indirectly by some other process).
Z$ u- N( Q. a; T2 S( d6 u
" v* z8 N3 m6 Q, N. K modelActions = new ActionGroupImpl (getZone ());8 y2 y: C* ?( A
$ @7 L+ \6 n y2 s# |9 N try {5 b: G: v, n9 T
modelActions.createActionTo$message
) |& @, S( }2 R3 B (heat, new Selector (heat.getClass (), "stepRule", false));
$ h! b2 D+ Q$ y5 H1 g! \ } catch (Exception e) {
: V4 \+ |5 J$ f& G6 c5 V1 F System.err.println ("Exception stepRule: " + e.getMessage ());- @' y* S/ ]# P3 P4 ^% o! Z/ E( s
}
0 T8 B; z, R6 }# G/ P7 {9 _) x/ M* X; m
try {% n/ A$ `' K5 D3 t% |; o
Heatbug proto = (Heatbug) heatbugList.get (0);: [( S o& W! u7 L& v7 x
Selector sel =
$ Z/ b- t6 V4 G @/ W4 f9 L3 i2 t new Selector (proto.getClass (), "heatbugStep", false);. x! q+ \* Z) L4 H8 P8 Q. x
actionForEach =
0 Z ]: W; e5 `* i& A0 D* \: G modelActions.createFActionForEachHomogeneous$call! [+ T7 `2 E/ t0 \6 A |! q; b
(heatbugList,
# b' y. M3 V/ W0 q6 D+ h new FCallImpl (this, proto, sel,
, O# Q- o, `& T" K+ j: z new FArgumentsImpl (this, sel)));% G8 C7 J' ^6 _# K7 {9 T1 r
} catch (Exception e) {
+ E$ k @" S+ ~5 P& H e.printStackTrace (System.err);
% E! Y. N' z- `3 X9 `0 M5 ~ }( J% ~2 N+ k9 ?. ^; t" P. H
5 h. B. S+ U7 S, @* L1 O
syncUpdateOrder ();
6 P' F* O! [! p2 h+ |4 t8 L z7 F2 `9 v/ \5 k% h5 r D% B
try {
5 Q: @9 K7 J" q$ ~ modelActions.createActionTo$message
: @! M( n; m2 q, x+ M- i (heat, new Selector (heat.getClass (), "updateLattice", false));$ |% N4 z' C* @! w
} catch (Exception e) {& c: e; {, C$ o W4 N
System.err.println("Exception updateLattice: " + e.getMessage ());
" V1 {3 Q: C8 Y1 u }
% A% h1 `/ d( ? - P o9 x) p$ b; T7 @
// Then we create a schedule that executes the; J& \3 g! U5 `' c3 Q: e
// modelActions. modelActions is an ActionGroup, by itself it
# ?2 _- h4 w% k8 C" | // has no notion of time. In order to have it executed in
$ o c7 p" _9 X- X" l* Y; t // time, we create a Schedule that says to use the
& q" m! u& v+ a2 y6 b# O4 | // modelActions ActionGroup at particular times. This
4 }/ z7 c$ P" y' y5 a // schedule has a repeat interval of 1, it will loop every6 |- W4 V( K0 R2 I3 }$ H
// time step. The action is executed at time 0 relative to0 x* L' H5 I8 c9 r% \ q. s
// the beginning of the loop.
1 |5 ^9 x2 R+ O1 }
z/ w* h) S" y4 ?! Z/ H6 ^6 `8 M // This is a simple schedule, with only one action that is
; m5 l( T* J4 I" s // just repeated every time. See jmousetrap for more
" [1 e8 [5 F1 q) o- `5 o3 O! q* f // complicated schedules.
. j/ ? L1 b; N* X: G2 c) `
1 z1 n( M" _5 u& \ modelSchedule = new ScheduleImpl (getZone (), 1);7 }, @- r+ N# _8 e6 L0 q
modelSchedule.at$createAction (0, modelActions);& c/ |- U: P! V) d2 E+ }
. t+ Y( C- b# ` U& B# W; F. j return this;
/ [( w6 q$ X1 b$ b+ k+ o } |