HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' p3 m$ t; ^9 F: E2 j* S( K. j
" E4 Y" B$ K1 a2 i
public Object buildActions () {
' S0 w7 E* c% f% g super.buildActions();
4 J& R( Y- V1 ]( w
$ P* J/ W6 s4 A7 E+ f // Create the list of simulation actions. We put these in6 M( S) {7 z4 |" ?
// an action group, because we want these actions to be
/ B' I( Q: ^* m3 a# G; [ // executed in a specific order, but these steps should
8 [; ]6 R9 j& y // take no (simulated) time. The M(foo) means "The message! N9 c! R% X5 v4 {: E9 Y
// called <foo>". You can send a message To a particular
2 q" w7 G7 h5 C; `/ w3 A3 ~ // object, or ForEach object in a collection.- i* d1 T; B$ e: \+ W8 u2 y
. @' ~4 b& d* H/ P" L
// Note we update the heatspace in two phases: first run
: P$ o& A5 ~5 y7 [( p) t& k# w // diffusion, then run "updateWorld" to actually enact the, E5 X- [: \; L* h: H$ b
// changes the heatbugs have made. The ordering here is
5 j; P7 S4 V7 [% r/ a2 b7 _( D+ b- u // significant!
3 c4 \+ i" u- D& P, q: C+ q
3 l, Z( N7 D% i, l7 {8 \ // Note also, that with the additional
: m8 U7 h" K8 O# `1 ?0 } // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ K6 B6 G6 F/ m* r. Y4 d // randomize the order in which the bugs actually run
q# t' A; h9 c // their step rule. This has the effect of removing any2 L- n, I5 k, P. n; C: T: _
// systematic bias in the iteration throught the heatbug
3 [, f$ Y B+ n4 d' k- V, B // list from timestep to timestep
* x( D: l# \& N1 b) q ( n5 T* E, N& D/ @; x; O
// By default, all `createActionForEach' modelActions have% H3 D6 ?. Q% m! O$ F W* M5 m
// a default order of `Sequential', which means that the
+ j7 u% \+ k7 P7 r" \( M! _ // order of iteration through the `heatbugList' will be
( w: d/ b6 S- {. d( \ // identical (assuming the list order is not changed: g( g4 z( I" P: |5 j
// indirectly by some other process).
' X* D9 W) s- L8 D& I8 z X
2 N L- P a/ k! I0 B! w0 m1 p2 p modelActions = new ActionGroupImpl (getZone ());2 A4 M) V! C6 I! I. B
7 p: P* J- y2 y; G; `, ~3 H& d
try {
/ r8 B/ ~1 i: R Q modelActions.createActionTo$message
% f ]9 I2 w3 ^: a (heat, new Selector (heat.getClass (), "stepRule", false));
$ j8 P* d- r, d2 y9 l& Q* h } catch (Exception e) {
" n* ^' F) T M2 |0 f+ K System.err.println ("Exception stepRule: " + e.getMessage ());% e1 Z/ I, ]$ L' b0 [
}
5 c3 u( H+ \' w* _( v6 k
K( c1 v3 o1 o/ |' p7 I. f3 a try {+ h! Y& P( }0 X: x+ g
Heatbug proto = (Heatbug) heatbugList.get (0);
8 O" j; w) t( p0 Z* C5 Y, K5 Y5 i Selector sel =
" |- J8 ]7 ?/ g+ Q0 F1 _5 m new Selector (proto.getClass (), "heatbugStep", false);7 ~: |% R3 E- o% `
actionForEach =, l3 V% ^4 @1 I2 C7 f# ]8 _
modelActions.createFActionForEachHomogeneous$call
Z& m3 c \4 E$ U/ L (heatbugList," I3 K6 A/ D1 x
new FCallImpl (this, proto, sel,
4 G+ ~) u0 n/ T. J; ]9 L- S; S new FArgumentsImpl (this, sel)));% G7 }- [6 A6 B
} catch (Exception e) { A3 | m" U6 \
e.printStackTrace (System.err);9 o0 B9 U; S; G ^$ z
}4 |4 S4 r' W! `/ X
# {: G9 r0 b5 {7 i
syncUpdateOrder ();
8 H$ \9 v/ Z7 S8 } J0 W
5 @( @: g; F' h6 e/ ^; n try {- x0 b5 j: Z7 |5 ]! p) |
modelActions.createActionTo$message
! ~1 c. V( C+ `# ^3 @7 l) Q (heat, new Selector (heat.getClass (), "updateLattice", false)); p, ?! C% {$ p* d- W; { a; H3 W5 W
} catch (Exception e) {
! v5 f4 }; n! J. j) [ System.err.println("Exception updateLattice: " + e.getMessage ());& Z5 L5 e6 Z/ m( N
}. e- F P+ Y/ z# }. ^4 T% M
. h* Z, m1 _/ q# p% ^
// Then we create a schedule that executes the
. c2 o3 c. S @& H0 n" `3 n) ` // modelActions. modelActions is an ActionGroup, by itself it
) P4 n/ R) I9 o2 O! p0 x; @5 J* u3 K. r // has no notion of time. In order to have it executed in
1 @" Z U2 Z% L$ i5 W+ { // time, we create a Schedule that says to use the- P) V: h* a1 G# S9 i) p
// modelActions ActionGroup at particular times. This
9 _' s z- {$ A/ R! t" b // schedule has a repeat interval of 1, it will loop every
. B' x" ^! S2 S `! D% I // time step. The action is executed at time 0 relative to
8 y" `7 `5 `' d* [- z$ P6 L; x // the beginning of the loop.
" @, _; `# n! e2 k/ V; H! @+ [. D5 i7 g: a+ o! Q* U. i; E
// This is a simple schedule, with only one action that is
) e4 m, O+ Y+ V w6 \. c! A7 d // just repeated every time. See jmousetrap for more0 `& n+ K9 \( V& W" c: n! o1 J) l
// complicated schedules.
7 ~( h5 W: v$ z+ K0 f3 d3 N5 v
' U. K% z& x7 L& E modelSchedule = new ScheduleImpl (getZone (), 1);
5 X( P6 d- B G" W modelSchedule.at$createAction (0, modelActions);
, |- u; _7 B+ F / H/ a g( @" D: F) d, C x
return this;$ a8 K. f1 y" I7 `6 v- B* f( ^
} |