HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 H8 q1 f2 }6 K$ A7 u
# c" g% ]/ c. {, @* L
public Object buildActions () {
8 X2 d5 P2 D9 u super.buildActions();
, x; c' `! V$ ^+ c & ~' w) @- r( R1 @1 s
// Create the list of simulation actions. We put these in
) F+ Y, u! |$ |; V0 r // an action group, because we want these actions to be; D2 E8 W8 V. b/ }; @4 W) m
// executed in a specific order, but these steps should
' p7 n d7 L" ~& y% o // take no (simulated) time. The M(foo) means "The message
. t) ~7 L+ o" e1 {) k6 h // called <foo>". You can send a message To a particular7 _# e0 Q2 Z1 z7 V0 r1 C/ E1 d% t; g
// object, or ForEach object in a collection.
& h: i; ^% y* @ K/ W2 M% A1 y# R3 q4 _
// Note we update the heatspace in two phases: first run
9 l, g1 T5 u- H5 T* ?0 Q // diffusion, then run "updateWorld" to actually enact the) @+ L" k4 g! `7 g" o5 C
// changes the heatbugs have made. The ordering here is
! w* W( @& {9 S- W) \ // significant!
. L9 b0 _4 K, ?; z' Q/ I6 F; m
5 N4 W* g$ }/ K; S/ R8 } // Note also, that with the additional
. N. f, R- R- f0 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
. {( L! r/ z1 v2 ]% _ // randomize the order in which the bugs actually run- [6 f2 n( Z; _' h0 ^
// their step rule. This has the effect of removing any( ` Y C0 Q/ x) i2 L4 o
// systematic bias in the iteration throught the heatbug& }' y9 H/ _+ t% L K9 I1 Q( i
// list from timestep to timestep: V' b$ T2 \; i4 \0 b& A& N G9 D
: l7 f; n) _5 G/ p" R3 q. D: w" ? // By default, all `createActionForEach' modelActions have4 P. w4 r4 K; e$ T
// a default order of `Sequential', which means that the
, O( }! i+ g, l' Y // order of iteration through the `heatbugList' will be- q& Z& G" K4 Y8 N2 u' ^
// identical (assuming the list order is not changed0 s0 t1 K) K9 b2 ~9 Y. H S1 j
// indirectly by some other process).! X7 h; I. A {/ a5 I
" c) y) Z/ X$ P1 q/ m
modelActions = new ActionGroupImpl (getZone ()); \7 r% @ I1 S8 C2 b
3 _, Y0 m4 C, U: o* f# T
try {
* p3 Y* i/ O3 Y' m6 l9 f modelActions.createActionTo$message% f* q8 h/ i" J0 u$ v4 y6 }
(heat, new Selector (heat.getClass (), "stepRule", false));
9 y$ n0 Y' Y3 P( ]" g } catch (Exception e) {+ X6 V# L* u2 \/ B2 R
System.err.println ("Exception stepRule: " + e.getMessage ());8 ^1 o7 r2 O! X
}' a( o0 H& @: Q- M5 m$ `
9 M3 l* o/ f' N! h- }7 |# N9 O1 j try {2 x' g/ Y/ @( |3 a
Heatbug proto = (Heatbug) heatbugList.get (0);
1 D* V- O D2 q. ]8 n2 X Selector sel =
% f8 n9 d& q! \1 t8 i1 b0 D new Selector (proto.getClass (), "heatbugStep", false);. D, r% M5 |8 g Q7 L* G- [
actionForEach =. {" ~5 u6 `/ y: H4 E0 X
modelActions.createFActionForEachHomogeneous$call9 y2 k3 f& w, L% ?
(heatbugList,
8 F! _: k2 q) O# p" I/ n8 s+ F new FCallImpl (this, proto, sel,
4 r7 Z0 x" q% J6 S9 E9 ~ new FArgumentsImpl (this, sel)));0 k! t6 P/ C8 |& L/ Y& C- k
} catch (Exception e) {
+ D% n9 A. h' s! d6 T$ _9 m& m e.printStackTrace (System.err);
) J, D9 K& k% f. D8 U$ H m }* e' l8 @& p8 c8 m/ z) z
: R7 D4 B+ t: r syncUpdateOrder ();& I$ v0 }/ ?* q
4 j, Z! e3 b- s5 j1 Z* j' Z; q% Q
try {. O* S" ]: d& D; i! C
modelActions.createActionTo$message - \6 r$ _% U, L4 A' h& \
(heat, new Selector (heat.getClass (), "updateLattice", false));
" K+ P- V' [! }; |' y( |' R) X1 v } catch (Exception e) {1 ]7 U! b8 c# g. _; L1 }$ ]+ g
System.err.println("Exception updateLattice: " + e.getMessage ());
& U3 B, ^; r* s1 V- Z1 B7 w2 Q }* i# B: I9 B* i$ l
1 I+ I& n8 G: y! C
// Then we create a schedule that executes the: I3 w, [6 n7 W
// modelActions. modelActions is an ActionGroup, by itself it
1 n: M& Z4 K- x: b1 |# v5 p // has no notion of time. In order to have it executed in
$ L6 r T* V# F! x // time, we create a Schedule that says to use the
# d7 H# \. [) O1 N3 z // modelActions ActionGroup at particular times. This2 s/ D( N0 u& o. z
// schedule has a repeat interval of 1, it will loop every! s# w2 H/ I. s4 `3 x }* L
// time step. The action is executed at time 0 relative to+ z: D: e4 N6 I! ] k* A
// the beginning of the loop.' q- h/ r7 L- w6 ?$ i
% E# [5 E1 i) J q
// This is a simple schedule, with only one action that is
6 A1 v* P; p* ?. Q0 c3 g y% R; c0 I // just repeated every time. See jmousetrap for more
8 A" q9 o6 s/ X* x$ ?1 n // complicated schedules.
# P: `% G0 Z3 g
' B! A! U) Z6 d/ u; ^7 `1 s9 `2 [ modelSchedule = new ScheduleImpl (getZone (), 1);
. r# h8 Y# ?- i1 U modelSchedule.at$createAction (0, modelActions);9 \4 h9 z3 a6 H4 |7 k; ^+ @# c
2 [: ^% i$ `4 v: n W return this;
' f4 _" U% n! \4 z" L/ h# a$ I } |