HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. K8 Z5 Z9 }7 H) I! ?4 Q* b6 {- o6 o9 u
public Object buildActions () {
. v) `& y4 Q# D super.buildActions();
4 D- c, T/ A6 ` 6 B" Q9 L& j5 Z T* g
// Create the list of simulation actions. We put these in
' E& p* y1 `3 ?$ T // an action group, because we want these actions to be
, z3 F% h6 a. K; l% x" q // executed in a specific order, but these steps should
$ {# P- Y, g, }( r, Z; U- s, v // take no (simulated) time. The M(foo) means "The message1 p4 D$ c4 t1 n( x5 U' }$ D: O
// called <foo>". You can send a message To a particular H; @: F$ m0 a* h" Y
// object, or ForEach object in a collection.
/ Q R6 R7 N4 J + a( ^# k' r+ P3 t: D: M' g
// Note we update the heatspace in two phases: first run$ \, L; z, e% m; ^
// diffusion, then run "updateWorld" to actually enact the" O, E1 v( q$ y2 Z
// changes the heatbugs have made. The ordering here is; n+ x V X) S+ i
// significant!
4 g$ d8 `, ?; I! p) ?) m9 h/ }9 w 7 C+ D- t% D" w* b( a. H( ^
// Note also, that with the additional
+ d4 {/ ]% g/ E' G8 W9 C // `randomizeHeatbugUpdateOrder' Boolean flag we can6 D% @7 \/ p$ a" j$ y
// randomize the order in which the bugs actually run
2 @# I. p) t. F: D2 x# G // their step rule. This has the effect of removing any( y8 S$ l# K. ?
// systematic bias in the iteration throught the heatbug( ]! x' K: \) Y: f2 v2 e! R4 j
// list from timestep to timestep
) e- _: I ~( L/ O0 g: ~
& s7 [$ r* o3 ^& z9 k& f // By default, all `createActionForEach' modelActions have5 ~5 b v2 D) J
// a default order of `Sequential', which means that the
3 Q( S/ o0 ^2 m: A2 s& c // order of iteration through the `heatbugList' will be
5 y- @/ {% E% S, A. |/ E // identical (assuming the list order is not changed
G* Z" m: H5 a' H& z // indirectly by some other process).4 x0 O5 M' L3 v- Y. z4 v
1 ?' z7 j8 k. s' } R modelActions = new ActionGroupImpl (getZone ());6 i2 E9 J' i2 B5 c
/ g) {% M* R1 a) S: [1 f try {6 I7 H2 X" @% E6 ^4 ~6 I3 R
modelActions.createActionTo$message
t2 ~$ p6 {) t* u8 p9 R% n6 a+ W (heat, new Selector (heat.getClass (), "stepRule", false));
8 F: t- |+ W, p0 X% }0 y8 U } catch (Exception e) {( c) l4 s) f1 Z( _6 x
System.err.println ("Exception stepRule: " + e.getMessage ());6 ?, K3 t( Q* T/ Z
}5 R# R Z1 l1 ]* |# D
, n, w. c! f. C6 P try {
/ b2 Q7 q/ r1 u) ]+ ^$ q4 V$ t2 y7 B2 @* ^ Heatbug proto = (Heatbug) heatbugList.get (0);
1 H) M b1 o9 X2 B) n# c6 ] Selector sel =
1 D+ `, z! L$ _5 w5 k# C new Selector (proto.getClass (), "heatbugStep", false);. s1 k6 m5 c' S, l
actionForEach =
+ I; {: W; n* w( n' _ modelActions.createFActionForEachHomogeneous$call. Q! a) v/ i9 ?# l& F
(heatbugList,
[/ g. g4 L/ e/ q6 X4 K new FCallImpl (this, proto, sel,- v1 z; S# X, D" c/ X4 B0 B
new FArgumentsImpl (this, sel)));. c+ L$ ?4 k; A7 g5 h( u
} catch (Exception e) {# x2 [8 @. P$ I9 {/ d
e.printStackTrace (System.err);
+ ^" q5 h; h' `9 x0 s4 b5 k1 \ }% R q' z& }1 J/ `
% K7 R" d1 [' B& x' K syncUpdateOrder ();4 f7 B, ^$ p W- v5 G
; t& X. Q( t/ W& U& n v( t: T, v try {
7 N& U6 V$ X6 z, _& k& V6 r$ w modelActions.createActionTo$message
5 f4 t; R4 q2 A5 z9 W! h (heat, new Selector (heat.getClass (), "updateLattice", false));
6 i7 j, V3 l0 @0 w. I } catch (Exception e) {
* B5 w; ^: A7 ?( P! ]- O/ {8 [ System.err.println("Exception updateLattice: " + e.getMessage ());: q% f! v4 T+ G( B- V# {" d: [
}: H9 N0 H" h7 {2 e v
2 u7 i" n2 `9 X0 \
// Then we create a schedule that executes the
2 s: K! T m+ }% K // modelActions. modelActions is an ActionGroup, by itself it/ I3 k* J, y1 d% f$ N$ }- _
// has no notion of time. In order to have it executed in
: `6 m1 ~( o4 p // time, we create a Schedule that says to use the
2 @2 y: A+ X- Z6 q9 l: K: T // modelActions ActionGroup at particular times. This9 H( e, x5 Z1 _8 T- m8 M
// schedule has a repeat interval of 1, it will loop every
! S4 ~; G \- n. k3 x& i7 M/ M // time step. The action is executed at time 0 relative to( X* t! v- L, L, \& M+ s2 o- C5 J# x
// the beginning of the loop.% i5 k. k" g6 t, U, ~
( Z* T, b1 H/ {! [, @2 r' ^2 B' I
// This is a simple schedule, with only one action that is' B$ h Y1 g* I' ~4 G+ g" r7 q
// just repeated every time. See jmousetrap for more
3 Z0 s5 A" @& V& n& ]2 @6 P // complicated schedules.
9 \/ G: |+ I# y # n, X7 G M8 @, ]( J' B% [1 \
modelSchedule = new ScheduleImpl (getZone (), 1);
% t. r: o7 ^/ {' c8 x modelSchedule.at$createAction (0, modelActions);. S% p/ g$ j% q4 G% A& c
+ L% ^+ [6 |7 k& H- E return this;, B$ M" |3 }/ w
} |