HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# b3 d3 P" n! V) v6 I* w
9 e3 y) M5 {/ i1 \/ w7 A9 w5 q8 p public Object buildActions () {5 |( D, G+ P& | }
super.buildActions();
- {9 \, O. a0 Z9 N0 S0 N
! |1 k( s4 h# u; ]. j: T7 C // Create the list of simulation actions. We put these in
" J# P! U( j- g* T // an action group, because we want these actions to be& b) e' U! z5 \( w2 x
// executed in a specific order, but these steps should
) K; f* g D9 Q. ~$ H // take no (simulated) time. The M(foo) means "The message; t6 c' a4 ` c# j" r5 g
// called <foo>". You can send a message To a particular
& W. F+ B f; ~ T" d // object, or ForEach object in a collection.+ ~/ D; Z/ C( e5 y1 V
: u0 o' @# P* ?. {9 C0 x // Note we update the heatspace in two phases: first run
! j j2 Z( c8 F4 R1 `# @ // diffusion, then run "updateWorld" to actually enact the5 E* W0 _2 G0 i6 N7 T
// changes the heatbugs have made. The ordering here is; h* r! Z% \: T! c+ N: d# [- k
// significant!% f" B% q; ^2 J& [+ k+ ?7 x# `& n& N( r
' z( E& o! u% Q8 d& f8 Y# H
// Note also, that with the additional
" m) {; L' U& [ // `randomizeHeatbugUpdateOrder' Boolean flag we can( P: m5 E/ k; ]6 B3 ?
// randomize the order in which the bugs actually run: d- H( ^" u$ @- @# z
// their step rule. This has the effect of removing any
* g; p; @+ Z" j5 a) L1 h6 O; c // systematic bias in the iteration throught the heatbug, D+ m5 f2 [; v h6 W. n" |' R* T
// list from timestep to timestep9 p9 |& s; |* |1 R( n& @6 o$ Z
+ r* e' o$ e: F, Q |* O! P // By default, all `createActionForEach' modelActions have) J: ~/ w2 M# N1 }3 z( J5 E" w, C
// a default order of `Sequential', which means that the3 B) [ w# L3 T8 x$ N) j, a; U) W
// order of iteration through the `heatbugList' will be" u+ e Z0 q3 _
// identical (assuming the list order is not changed# c; j, M) F2 b0 d y: w7 w* l* {; p' N" l
// indirectly by some other process).2 H( y+ e& _* B5 W; _$ }0 h
: U" H$ o0 }; q' [
modelActions = new ActionGroupImpl (getZone ());
6 Y% I8 x1 T; K) a N c; J" ?! n# w* i
try {7 z* ?4 E( v: C6 m/ |. f9 q. k
modelActions.createActionTo$message
$ [- y) ]* ~6 d* F: { (heat, new Selector (heat.getClass (), "stepRule", false));/ p$ u3 {* b# M3 C
} catch (Exception e) {* F$ X7 f. R/ r* r' i# `
System.err.println ("Exception stepRule: " + e.getMessage ());9 G! G% e$ D; C( u8 P& w0 D
}
2 k& s9 y2 A( g K6 S1 d4 f0 ^( G3 l
# q+ _# `0 c5 A/ R try {1 j$ m" f: F# A7 V7 S- Y2 p
Heatbug proto = (Heatbug) heatbugList.get (0);
/ G- C0 E! c3 T/ B0 o6 L8 }9 [ Selector sel = ! o8 [( O+ V b* k: I; v. t
new Selector (proto.getClass (), "heatbugStep", false);
! I; x; C1 f: J5 m9 T4 U actionForEach =" m# d9 _2 ? G( h
modelActions.createFActionForEachHomogeneous$call8 c7 j {8 z5 k, B+ e1 Q
(heatbugList,
% |1 \" T) \: l. m' K, a new FCallImpl (this, proto, sel,# e a3 j6 K8 c8 s$ z
new FArgumentsImpl (this, sel)));' C( m" r/ t# h9 b* O- k% G% B# X: b
} catch (Exception e) {
: e% S2 M# r( ?3 e/ z, C3 x# ? e.printStackTrace (System.err);, n. Q8 d" `- r/ I' y! f
}) U. ?, t/ i$ A4 f7 H: p
% T- ]2 R1 x. s) ~: v, T
syncUpdateOrder ();% e" p1 t4 h) [+ y+ H/ }1 U- l/ w; x
- ^) e9 U( U7 x% D* [+ p/ `; _ try {
8 d4 w* Q$ t, o& ]" u modelActions.createActionTo$message
P8 k% ]) X C2 f1 ~% ] (heat, new Selector (heat.getClass (), "updateLattice", false));
! O7 u0 i8 M2 w# f+ T' J1 [ } catch (Exception e) {: z3 }: i1 D0 @/ l4 x! q2 S' b4 \
System.err.println("Exception updateLattice: " + e.getMessage ());
. ?2 n' ~6 A6 q- B2 L0 Y }6 y. G% e6 c5 [1 p
% X8 H2 ~' {7 z/ F- e5 D3 T
// Then we create a schedule that executes the
) a, ^ X9 _( V- q* Q2 | // modelActions. modelActions is an ActionGroup, by itself it8 s3 K. b" O) @; A, j a6 p$ i1 p
// has no notion of time. In order to have it executed in
! v) L. p1 j6 B5 d8 S2 e // time, we create a Schedule that says to use the
7 q. r- c3 H" c! S& }3 l- | // modelActions ActionGroup at particular times. This
, J$ U3 W, k+ d // schedule has a repeat interval of 1, it will loop every1 e' R" I% O1 P( K* f/ E a
// time step. The action is executed at time 0 relative to
# M% g' U: }; A+ q, O' {" P1 V // the beginning of the loop.' J+ ?0 C$ E! Z! z, R! X
1 a- g2 N- ] y3 k8 L' k- x // This is a simple schedule, with only one action that is
0 U7 M/ u( [3 Z$ l" z- M, h // just repeated every time. See jmousetrap for more8 V3 Q% }- I2 R% O( n
// complicated schedules.
# g5 ]" E" {$ r" @% [, J
6 j" b6 i: Y f9 d( K modelSchedule = new ScheduleImpl (getZone (), 1);
3 U$ N. K2 V( P+ N% [$ [ modelSchedule.at$createAction (0, modelActions);& w4 ^. m) n4 @ _7 E0 [# P
, N2 T! D$ [$ w+ @% I return this;
0 M! k, Y% g: Y/ ~8 M } |