HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" ?$ Y& H4 }) O! l5 ]6 k9 c$ @5 v% q0 y; j0 `: e" D( o
public Object buildActions () {
[1 a4 a9 r# _) F4 P super.buildActions();& D: A6 D$ P, r% J
2 |# d1 p& t2 ?/ ?- ]% O( m* [1 @, H3 I // Create the list of simulation actions. We put these in( S) } }! i( c. B
// an action group, because we want these actions to be7 o5 R3 F5 E6 q/ {3 G5 u, E/ P
// executed in a specific order, but these steps should$ i$ p: ], L1 x+ m" }2 D/ G
// take no (simulated) time. The M(foo) means "The message
; x( n3 k$ \2 Y! { // called <foo>". You can send a message To a particular
8 Z. p) l" F* D8 e- \ // object, or ForEach object in a collection.
& x) S% k: B6 D) B5 R3 C
+ H% \# _. _! x- K0 U // Note we update the heatspace in two phases: first run
7 Q l! V1 z* w* @# j \ // diffusion, then run "updateWorld" to actually enact the
4 m% m) m# F/ } // changes the heatbugs have made. The ordering here is, o' t1 T! A0 M
// significant!' [" t) i% k! ^( I8 B
: }* R7 U$ I' a+ _
// Note also, that with the additional, `/ z/ ^* v" g2 v/ s: x- V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" M/ t. j6 D7 J4 `. E7 y- O // randomize the order in which the bugs actually run
* z; D% u8 j( \! m2 Z1 \ // their step rule. This has the effect of removing any- D/ w; ^6 r5 ~% `+ [! d( O. @6 R8 t
// systematic bias in the iteration throught the heatbug
8 A8 O( _: \) y: F w# [5 { // list from timestep to timestep
) z$ B" x& ]& n8 q9 d 9 p2 H v5 y4 _/ S+ F, j% _- i
// By default, all `createActionForEach' modelActions have
; g U+ r# P+ U // a default order of `Sequential', which means that the
) I* n9 H$ i2 ~$ y // order of iteration through the `heatbugList' will be u+ _0 c k. c& k5 a" V
// identical (assuming the list order is not changed; V8 l# e5 M+ |1 o0 _# [7 \# p
// indirectly by some other process).0 A- q# q* M6 n2 N r7 v E
' N+ P1 q# _! T5 P# v, G' ?2 R
modelActions = new ActionGroupImpl (getZone ());1 T3 ]* a5 _5 y# F5 s& r; w: u7 ^
- G4 H/ q, Z5 A) P; M
try {1 ]7 t4 w& r( I4 O9 g( ?4 H
modelActions.createActionTo$message+ M7 w% U6 R$ i; k2 N
(heat, new Selector (heat.getClass (), "stepRule", false));1 D* i, s, N, [8 W5 o- G7 l4 K
} catch (Exception e) {& Z5 Y0 G* b+ q" m" |
System.err.println ("Exception stepRule: " + e.getMessage ());
1 h, B$ C `+ m- P. \9 h- ` }
( H: ]* A( B# Z+ i; F }7 J9 h
) E6 _5 c X* ? t6 b9 F1 Q a5 D try {4 L3 n" K" B/ h+ @$ ]) v0 X H
Heatbug proto = (Heatbug) heatbugList.get (0);6 g, P6 H; I. k( s1 M$ q; w W
Selector sel =
3 w1 F, Z* N/ B new Selector (proto.getClass (), "heatbugStep", false);
9 J* r3 g+ b: F actionForEach =
4 j( h0 a7 p& t8 c9 D+ t modelActions.createFActionForEachHomogeneous$call+ w# s7 k( h1 t% y
(heatbugList,
% L4 F. [& N6 ? new FCallImpl (this, proto, sel,
2 i6 e0 o, N' h* J' f" x new FArgumentsImpl (this, sel)));
: S( x8 U2 `; G3 k } catch (Exception e) {
8 r( `5 n9 a$ \! P, X t( y- a& E \ e.printStackTrace (System.err);- N9 S9 i& E- D* ^+ R. V
}
4 ]/ x+ ^1 V3 A4 `8 J! U9 i: h
9 D) C+ ]0 o" p0 F' W, p syncUpdateOrder ();
+ I f( v* E+ P# ~5 P c+ e5 V# Q% S; Z
try {
" h# \0 ~' c1 h. X modelActions.createActionTo$message
! [) s0 W1 b: u4 E) @ (heat, new Selector (heat.getClass (), "updateLattice", false));8 {+ |) ]. Y3 K% T! |9 V
} catch (Exception e) {
# M; S* O+ \6 S+ D7 b9 H, f* w System.err.println("Exception updateLattice: " + e.getMessage ());# a' S1 V- h* s) I8 C& t. i3 I/ N
}! [6 S3 B L/ l4 e* {
8 m- X# R3 A8 ?% c // Then we create a schedule that executes the) t4 I" e/ J; O, @9 H7 h5 I) l' d
// modelActions. modelActions is an ActionGroup, by itself it4 N2 s2 l- a" A/ ~5 o; N7 \
// has no notion of time. In order to have it executed in
# I. z1 y3 Z) H& N9 ?+ i7 p // time, we create a Schedule that says to use the
A/ N: o& Q* [. F // modelActions ActionGroup at particular times. This0 g, K- a- D* ^- o& Y0 k6 K) ~
// schedule has a repeat interval of 1, it will loop every
( }+ f8 f% s7 K6 Z: d$ R. Y8 d // time step. The action is executed at time 0 relative to, R& T7 }3 C, L+ ?4 L
// the beginning of the loop.
) [0 t6 O0 P7 ]% W
; x' Y" ]! i& _$ F; ~ // This is a simple schedule, with only one action that is
6 t2 F9 ? {: _$ y // just repeated every time. See jmousetrap for more
5 G5 ^9 K) u) p( @8 k; g: e& d. z // complicated schedules.' @+ C/ K3 X' p. }* I j+ ]
; W; g/ p2 X; i3 o* f f% y
modelSchedule = new ScheduleImpl (getZone (), 1);
2 n1 {3 J1 F3 ~2 [ i. d9 f3 H$ O modelSchedule.at$createAction (0, modelActions);) r) R, o% C# |# ]" t$ \
}; w" R# n% ^& M
return this;8 u- v" s, o, C% A
} |