HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& j% K& k8 a1 T
# a a% }$ z+ G8 n% S' s' I' S
public Object buildActions () {
. H1 @" Q- t5 o, r# C super.buildActions();
* Z- a# j7 K# r7 e/ {, {: x! Z 2 m1 s1 z* y1 Q! T3 {& s
// Create the list of simulation actions. We put these in6 P6 C; T5 b- b0 z4 W# u2 L
// an action group, because we want these actions to be& Z# ]4 d! i, g
// executed in a specific order, but these steps should+ h0 [# v, c2 y
// take no (simulated) time. The M(foo) means "The message
3 d0 w' n5 V W! H8 E5 ~: }0 T" P; @ // called <foo>". You can send a message To a particular/ X2 Z+ g5 F4 H( t& T
// object, or ForEach object in a collection.' m& f1 C: `: [/ K# ?: B
+ Y1 b5 e) p3 Y
// Note we update the heatspace in two phases: first run5 \8 N1 n9 ]1 Y/ i2 T
// diffusion, then run "updateWorld" to actually enact the
2 s. ~ e9 X8 n$ h- @' l // changes the heatbugs have made. The ordering here is
6 p6 W5 v& ^$ D) b9 B // significant!( ?9 L2 x( n! n7 g, t2 W
' l; C+ D+ t o7 H, \& D' o" S
// Note also, that with the additional
# P/ p+ S6 c/ L- F // `randomizeHeatbugUpdateOrder' Boolean flag we can' d0 d/ K* |+ @
// randomize the order in which the bugs actually run$ F( g/ Z% B2 N) H' Z
// their step rule. This has the effect of removing any" l4 a: D+ x; S! V: r
// systematic bias in the iteration throught the heatbug, E: }$ e+ n. _
// list from timestep to timestep- R$ o# W- m8 ?4 O7 z, o
8 z4 r6 ]8 \0 F0 h6 I* c3 Y
// By default, all `createActionForEach' modelActions have3 Q. W. z2 X: \: y, Y% E. r. a
// a default order of `Sequential', which means that the
6 R: a7 x: F+ H. V1 g/ ?2 \ // order of iteration through the `heatbugList' will be
1 o0 ]. a( Y. B3 p+ y, q# C // identical (assuming the list order is not changed
C$ a( d3 l8 Z9 W) W$ } // indirectly by some other process).9 d/ V/ J: v9 l3 Y& o3 I
, m% `. B% G8 S8 _# F% S. k o. o, X
modelActions = new ActionGroupImpl (getZone ());" g3 t) h% i2 I- x, J
9 f1 R/ W* x% ]* o1 u try {
! I/ i# b' \5 i$ O8 n! u) J modelActions.createActionTo$message
1 `9 ]# C# X+ b- \3 O& S (heat, new Selector (heat.getClass (), "stepRule", false));3 E1 t0 q+ k5 R" _+ l7 }
} catch (Exception e) {
' V, \' H P7 S' J" Q System.err.println ("Exception stepRule: " + e.getMessage ()); r% r2 H6 S- i& L" ?! i3 u
}
/ \3 @$ e2 R5 ^! M1 I. e
2 {$ J$ f1 _5 D. }! l7 s, T+ p try {' C c# E5 b# V& u5 ]5 Z! M) w# S8 Z
Heatbug proto = (Heatbug) heatbugList.get (0);% {+ k1 [) W( @% K% }4 ~! w7 [
Selector sel =
/ _9 S8 @. Z: {- [/ ]5 Y9 ^ new Selector (proto.getClass (), "heatbugStep", false);, `/ V- D9 P# l. W3 S
actionForEach =, |. m' l7 _3 U
modelActions.createFActionForEachHomogeneous$call) X: r" H4 ]% `: _
(heatbugList,8 c( a ^; B) n, p; f
new FCallImpl (this, proto, sel,* G* M) ~: G1 R
new FArgumentsImpl (this, sel)));
3 Y/ v. n/ o# [4 T4 |- z6 X) m } catch (Exception e) {
4 H/ e3 J' ~# H% l. g& I! z6 R e.printStackTrace (System.err);
+ A# }6 s0 B7 ~; P+ u* W }
/ `# H# w# R( t' M
% @: d: I2 X0 Y2 {7 T. Z syncUpdateOrder ();
) X0 `# i7 e5 z8 f) F6 N, k; y7 L5 ^: g- C" r! R, a. y5 x; h: z
try {
6 l- `, }* M6 |( M7 R modelActions.createActionTo$message
2 }9 `0 s# ?, P* |1 a9 {6 c (heat, new Selector (heat.getClass (), "updateLattice", false));9 ~7 u* W; s8 H; M. [6 x
} catch (Exception e) {
7 \/ E" L) {4 ~' ^ System.err.println("Exception updateLattice: " + e.getMessage ());
) U% G5 v1 R$ Z! i; d }
9 M E9 m& v1 A0 g
$ p( Q, _0 s' X6 ]4 N4 F // Then we create a schedule that executes the# _0 m. K( ?* N% u, [: Z
// modelActions. modelActions is an ActionGroup, by itself it
& X. Z6 l0 _# r, v8 w // has no notion of time. In order to have it executed in2 t% W1 r- Y. E* x- f
// time, we create a Schedule that says to use the |* r$ x% H: s
// modelActions ActionGroup at particular times. This
6 X+ R0 N6 n$ o" a' {; m; Z // schedule has a repeat interval of 1, it will loop every
+ {' r6 V* o$ d // time step. The action is executed at time 0 relative to5 A# l2 j; F5 V. z2 [% V
// the beginning of the loop.: \% [% E! m8 G0 X) @
8 `( u1 T8 _" S3 n // This is a simple schedule, with only one action that is
! s8 a' L8 l+ z' ]* N. t // just repeated every time. See jmousetrap for more
; p% x" o4 _5 Z2 [6 l0 J! D$ g4 q // complicated schedules.7 P S! [4 U0 U3 Z
1 S' q3 i( b$ m. R8 m b
modelSchedule = new ScheduleImpl (getZone (), 1);4 B" ~2 L( v. W, D' [* ~4 c1 w
modelSchedule.at$createAction (0, modelActions);
' r) G; u5 @4 n& R$ |4 R) x' S ' ^* ?" O* Q1 ?8 K2 f. P
return this;
+ |4 b0 ?% \' x% @; u } |