HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
G* `3 k6 {9 Z) j" ]0 `7 W4 v
* z# I7 s! v! w! F2 a; Q public Object buildActions () {
) h& q8 ^2 r% M. d8 k super.buildActions();; I% y% v8 ~: b" N4 S5 {- g
% r% \, B/ A$ _# t8 ` // Create the list of simulation actions. We put these in2 ?+ W& l. L# \+ l
// an action group, because we want these actions to be
* G4 u( v Z1 I/ S! O! g% A \- q // executed in a specific order, but these steps should
: h6 t0 ~% y8 H! |5 Z // take no (simulated) time. The M(foo) means "The message1 m9 ^& ~! A. r+ U2 l* D+ F8 v( [2 i
// called <foo>". You can send a message To a particular
9 d) f0 m, L# O, v // object, or ForEach object in a collection.
1 J3 }6 u! y7 {! [8 w) w
# s$ U$ b8 J7 z: C# s3 ]% I4 B // Note we update the heatspace in two phases: first run2 c R& v8 E+ r1 n5 K8 i
// diffusion, then run "updateWorld" to actually enact the! E, d3 {4 C; Y1 h
// changes the heatbugs have made. The ordering here is6 c0 k* X& x5 q" V" H! O
// significant!" A M% q( ^' j9 M( C: i" c+ K" }
& F+ {7 t/ p7 p8 n. Q+ { // Note also, that with the additional
+ l7 C x9 w/ b! y! i // `randomizeHeatbugUpdateOrder' Boolean flag we can
# q, {: t" d$ @& v$ D // randomize the order in which the bugs actually run; _! S' j3 g; v5 j/ V6 B
// their step rule. This has the effect of removing any
# Q: Y" B# k9 V- Y6 V // systematic bias in the iteration throught the heatbug
! N) x K( A* |1 u // list from timestep to timestep3 Q5 i% A- X' j: D$ O
8 o" L- |# D& Z% Q. o) A- [ // By default, all `createActionForEach' modelActions have
2 x( |. S1 l5 u# A2 ^ // a default order of `Sequential', which means that the
& g1 H% p9 C3 K4 i! P+ M! a // order of iteration through the `heatbugList' will be
* Z' c: R" i* C' }$ Q: h( J // identical (assuming the list order is not changed& Z, b& U, r9 o# V7 @6 {# y# `
// indirectly by some other process).
) G. J e7 O$ R: e/ @4 {' u
% v1 l, s2 e% R modelActions = new ActionGroupImpl (getZone ());
# h* x4 F5 d; l+ s7 `5 m
2 G. G" Y/ w7 ]9 Q& l4 {" S1 i try {( V# I0 O3 D! H$ a' \+ Z
modelActions.createActionTo$message
% g) d* P* J; Z% `' B) m (heat, new Selector (heat.getClass (), "stepRule", false));8 \7 H. a7 s8 \1 e. b/ z6 R
} catch (Exception e) {/ k5 h n4 Z" V3 z9 @6 q6 a
System.err.println ("Exception stepRule: " + e.getMessage ());7 ]8 u- m( a2 @
}* D6 I7 d1 w5 K7 K
1 x5 U7 W+ ]+ h- c7 W; S try {& k7 n. d+ {# }9 [# P
Heatbug proto = (Heatbug) heatbugList.get (0);, D$ Y* |- X1 W0 u
Selector sel =
! k" S+ }* ~3 \$ f new Selector (proto.getClass (), "heatbugStep", false);0 q: ]7 C7 J/ b' U- e
actionForEach =
, N1 y( s) z9 K& [, m/ D: ]6 d modelActions.createFActionForEachHomogeneous$call) F% _. T/ x Y
(heatbugList,
( G* s! i) Q F0 Q2 x7 S0 Z new FCallImpl (this, proto, sel,% O5 j! n! X/ D+ ]6 J3 g, X
new FArgumentsImpl (this, sel)));
! X/ x# K9 \; A( @" ^ } catch (Exception e) {
5 R- g- X4 l9 [5 R e.printStackTrace (System.err);
2 o6 Z) h5 \. z5 N; C0 P }1 L8 b; k: [/ Q# C8 z
/ P; P/ J$ u% J4 |5 e. m; S syncUpdateOrder ();
' E0 f; Z( p. l' O, n( G" e0 n% [( H
1 v! g y5 Z6 }3 I try {& w' Q9 d$ ^8 J _1 _; r$ Q
modelActions.createActionTo$message $ ?3 H1 `9 F0 W4 ^ w; k: x8 q/ u- P
(heat, new Selector (heat.getClass (), "updateLattice", false));: S$ |0 ~) C3 q% n
} catch (Exception e) {
6 _- j4 Q( N/ c9 Z System.err.println("Exception updateLattice: " + e.getMessage ());) o* q" U' T; \8 k- H7 _: [
}
2 L+ L' I, h8 ~ % ]6 u# u. c! H; L- x$ r
// Then we create a schedule that executes the
: V6 D# I4 |' W7 w) x // modelActions. modelActions is an ActionGroup, by itself it$ G/ c0 \' ?' o1 X
// has no notion of time. In order to have it executed in! }4 a# m) d: n9 t( v
// time, we create a Schedule that says to use the
0 D4 B( X1 Y. X- t) Z- k F // modelActions ActionGroup at particular times. This0 D* Z, P8 t9 g% i" A) b. N. @ Z
// schedule has a repeat interval of 1, it will loop every
; H7 j0 Q4 ~' A% l: b8 Y" J* z // time step. The action is executed at time 0 relative to9 N4 _" k, S! c6 S# ?9 n" {
// the beginning of the loop. t1 a$ Z. L4 h- U* O- W
4 ?& s, N6 u& R* i1 G% R8 y; U
// This is a simple schedule, with only one action that is
/ D, Q6 f6 S- k$ {; U0 ~6 e! B // just repeated every time. See jmousetrap for more7 N+ j2 D" j P6 p
// complicated schedules.2 s _9 L5 f2 N+ t9 H
2 {! S+ V2 d: `3 U, W/ J* P
modelSchedule = new ScheduleImpl (getZone (), 1);
5 B- S: e+ s, W" ^% J modelSchedule.at$createAction (0, modelActions);$ s6 H* Q) P1 u2 C8 N' `+ f
0 b# U3 E% t9 r* r/ v3 r: N/ o
return this;- j9 \7 w) V, t7 n. s; _+ G
} |