HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 j2 P$ K M4 z7 S$ Z0 R
3 {+ w5 H+ n- j public Object buildActions () {, x/ y U$ t' }( N# _- D h
super.buildActions();
0 |7 v4 v: z% k* W/ `
7 U* \ ^! e0 l+ b" f // Create the list of simulation actions. We put these in
8 C7 [' t" T L! M. U/ M) W // an action group, because we want these actions to be
$ k9 e* X" U7 U // executed in a specific order, but these steps should
/ b4 p3 u1 Y* z8 r t, M$ ?) y' p // take no (simulated) time. The M(foo) means "The message( d5 |7 g: S! A2 i8 g d( l5 r7 r% t
// called <foo>". You can send a message To a particular1 S- L0 K: F: @1 v+ M; \
// object, or ForEach object in a collection.
; x8 Y: _$ S2 m& I8 N# \ 2 A7 x9 _& r3 e
// Note we update the heatspace in two phases: first run
1 t- l; b- s. f6 S7 l // diffusion, then run "updateWorld" to actually enact the
& L2 U0 A5 O: _2 ]0 ]2 z, | // changes the heatbugs have made. The ordering here is# i4 N0 t' y" U: c" ^2 B9 G
// significant!& E M, |6 L& v
+ g& t4 i0 L- O$ H6 ]
// Note also, that with the additional# J: D! b6 {# w) M' ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can( K3 X: z7 m' {; W
// randomize the order in which the bugs actually run
3 } P* j- [0 p2 h. K& d. G // their step rule. This has the effect of removing any L* I( h- A) |# j
// systematic bias in the iteration throught the heatbug
' e9 O/ G3 N1 C // list from timestep to timestep
/ O& _: q N+ ^6 _- U5 t) V & e! j+ K& B# ?3 d- p
// By default, all `createActionForEach' modelActions have! q6 ~6 h' k$ }* f
// a default order of `Sequential', which means that the. o% V# ~/ y8 y5 }' j, U, B
// order of iteration through the `heatbugList' will be; c" T' X O8 u8 J8 B
// identical (assuming the list order is not changed {4 L$ E3 i6 y7 h0 h9 e$ u
// indirectly by some other process).
0 i# ]5 f3 j: ^# C) K! @ ! [0 g0 z) N; | L
modelActions = new ActionGroupImpl (getZone ());
% ?2 a+ L1 u p/ Y
: p7 Q* @4 @( @. x$ q! ?# B* T try {4 A. O" n( N. H
modelActions.createActionTo$message
$ P5 G5 Y- A+ C) G (heat, new Selector (heat.getClass (), "stepRule", false));
6 D- \, [$ s8 \' S2 o+ G } catch (Exception e) {
# j* x/ K+ i, Y3 ?" \0 [$ s6 k System.err.println ("Exception stepRule: " + e.getMessage ()); e8 J6 {+ {1 L; Q2 l- V
}2 F+ c' S9 s) A9 w( T0 W. J
7 o" p+ E! E* Y. \8 `) E4 q
try {
. i- I9 B# B& Q* C1 | Heatbug proto = (Heatbug) heatbugList.get (0);
5 I9 U% `5 L* g- B" m0 A Selector sel =
* E* p0 e* }) f- i0 g8 q new Selector (proto.getClass (), "heatbugStep", false);
1 }: B2 u% {. F8 s" @9 V actionForEach =% D0 r( I9 o+ i7 i# P
modelActions.createFActionForEachHomogeneous$call' |5 G' [5 i# N" y
(heatbugList,
5 r$ |1 U, x8 h new FCallImpl (this, proto, sel,
$ O. E2 z8 W4 D new FArgumentsImpl (this, sel)));
# p: a9 \9 y& T" I } catch (Exception e) {
$ K9 H% h) u5 |( B" ] e.printStackTrace (System.err);
7 h5 q1 `: i' k# { }
5 r* j' Q" m: c5 I: B$ W
* Y. U& h; \4 a" h, p7 X syncUpdateOrder ();
/ _4 e/ U5 W- j' m1 d! n4 a+ p, X" J
- q% E3 X8 Z' F try {* B" g% z5 m- r# ?
modelActions.createActionTo$message
5 g( q2 `! g/ K: M+ Y+ D (heat, new Selector (heat.getClass (), "updateLattice", false));# I% F' i/ ` N4 z5 O; P
} catch (Exception e) {
% t6 c( p; \, W% P" @6 r8 R System.err.println("Exception updateLattice: " + e.getMessage ());
5 N5 ^5 R% \$ d# q }# b0 N3 m) z3 a- ~7 }+ `0 I
+ N8 B. Q9 b' L# [+ ] F
// Then we create a schedule that executes the& [4 Z- F3 J0 [+ W
// modelActions. modelActions is an ActionGroup, by itself it0 }9 q9 y4 S9 h- e: _3 g3 J0 H
// has no notion of time. In order to have it executed in6 V t. w$ o3 X# s8 k' v
// time, we create a Schedule that says to use the# }4 ~( B2 o' c% u/ n
// modelActions ActionGroup at particular times. This
/ ?9 k4 p/ S( @7 K // schedule has a repeat interval of 1, it will loop every6 K$ \5 Y) {# V5 h) d1 W
// time step. The action is executed at time 0 relative to; j' e: v5 @1 f3 N; ?
// the beginning of the loop.0 i8 i7 _/ U: O6 r) l/ x
+ Y$ ~- q1 V8 |- m; \% y- n6 F F // This is a simple schedule, with only one action that is
6 F# O, G" s1 |* ] // just repeated every time. See jmousetrap for more. F* P9 W8 t' Y
// complicated schedules.
% k( y, h; I) a( e+ h+ }. v! J
0 x$ U$ x7 U# n$ B: a modelSchedule = new ScheduleImpl (getZone (), 1);
- q& k3 o+ j6 X) O7 ?: N modelSchedule.at$createAction (0, modelActions);
/ A% H, g5 g6 u. E5 ~
X y. o3 b# P4 b; ] return this;3 @& z- h$ p, u, U
} |