HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 t$ h5 ?; r1 |* Y' N7 r0 k
# n8 d. q) H: e3 V, B public Object buildActions () {
* Y! n# C/ q+ f* a% Y: J super.buildActions();+ Z9 o' d- d0 R9 h% N
7 u$ _! g9 Q( l$ c
// Create the list of simulation actions. We put these in/ b- P- l3 T4 f m! Q8 E) G, E
// an action group, because we want these actions to be! ~5 u. Y4 m9 N/ c/ e$ B, u9 c8 K6 ?
// executed in a specific order, but these steps should
! r! V$ }/ T- V* {5 |8 J // take no (simulated) time. The M(foo) means "The message# t1 C$ B! l8 t3 i& `
// called <foo>". You can send a message To a particular
# T. J' e2 x# ~2 f7 z2 o, i+ { // object, or ForEach object in a collection.
7 P1 R' m% W D 4 `+ R. k: Y' D. P H$ S
// Note we update the heatspace in two phases: first run
& m# X4 D4 ]" i0 S& x2 v // diffusion, then run "updateWorld" to actually enact the
0 s2 l9 q, E( f- l. H // changes the heatbugs have made. The ordering here is- B2 Y$ }9 ]" C% y% X0 t) _$ L- H$ ^
// significant!
9 d! |7 V% V5 U* V- [& A* ^/ i 4 P [$ H9 x& E. Z
// Note also, that with the additional
/ c+ p+ a( d" |* a // `randomizeHeatbugUpdateOrder' Boolean flag we can+ {$ G$ e2 {5 g$ j x ]. f- D
// randomize the order in which the bugs actually run& D' N9 u/ q( B" E/ v$ K1 y
// their step rule. This has the effect of removing any! a S( q3 M) B' n/ U
// systematic bias in the iteration throught the heatbug
0 F3 G8 v% \' z. ]3 R' L // list from timestep to timestep
; o6 i+ a6 _" D; t! p5 x . d* `, ^! Z8 |# Y7 W7 n2 ]
// By default, all `createActionForEach' modelActions have
/ {3 ]: Q" n# `, z7 f // a default order of `Sequential', which means that the
; ~# c7 R. b8 y* K8 W // order of iteration through the `heatbugList' will be
( ~7 y) g: Q: I3 m8 c7 W // identical (assuming the list order is not changed
8 t) X! Q5 v3 N% _4 ?3 R' l // indirectly by some other process).
% u7 y9 b- E; i- M
& H# Y* D. g5 A: B- D, X7 C modelActions = new ActionGroupImpl (getZone ());7 z: \/ n5 p7 Z6 ]: j8 b
0 L5 u- E( q- S" @3 i6 e try {4 @' `7 W k% \+ J! t$ R6 q
modelActions.createActionTo$message
j/ W( @5 G- ~9 @* L% Q (heat, new Selector (heat.getClass (), "stepRule", false));
* |& B0 c( y6 A B2 p d, q4 b } catch (Exception e) {- e+ A& c2 J5 G- L) F
System.err.println ("Exception stepRule: " + e.getMessage ());8 q/ |. x# Z' J) v: Y+ ?
}
. M T# M' f( A0 S- R7 m8 @& Z# [, D3 A- X
try {
4 I+ o& q( b* ]4 S Heatbug proto = (Heatbug) heatbugList.get (0);+ Q9 x' Z, N( |2 l8 q
Selector sel =
- u- o0 s7 m+ F( j3 W new Selector (proto.getClass (), "heatbugStep", false);% Z- B% k7 N+ D9 J& h7 U
actionForEach =! O4 t) \/ P- H# k) n8 J8 S& S- C
modelActions.createFActionForEachHomogeneous$call; `1 Z/ U+ C g* z
(heatbugList,
3 r) J) J( V% Z3 q6 ]4 l new FCallImpl (this, proto, sel,
0 b6 g0 a/ N. F4 h: U: y new FArgumentsImpl (this, sel)));
9 h& ~8 C- k6 G; c1 Y } catch (Exception e) {
: @) r, U4 J( a: j5 N e.printStackTrace (System.err); r3 j) A$ ~9 i
}! H: z8 }8 u. u( V u3 l& B
8 i3 w" W- E4 g4 A) D
syncUpdateOrder ();& O5 H5 {' a/ u$ ^ X
. [8 M% k% ? q( {8 |0 ^1 l0 z" m3 n try {: {3 D( Z5 I( J$ F0 X
modelActions.createActionTo$message
3 s0 s( v/ l' S( V$ w0 }: c% ^ (heat, new Selector (heat.getClass (), "updateLattice", false));5 T* y2 h0 V2 h
} catch (Exception e) {/ ^$ A/ Q. g0 D8 p7 h% e3 Y
System.err.println("Exception updateLattice: " + e.getMessage ());
! c, B: Q' Y8 w }3 c9 b" Q3 T) b. T
: Z$ `/ O9 K h9 B8 s% ^
// Then we create a schedule that executes the, k: J) E( S) H4 M' w/ ?$ V+ N
// modelActions. modelActions is an ActionGroup, by itself it
A8 B3 y6 u+ u% G7 I& | \% N // has no notion of time. In order to have it executed in/ f& w/ a5 `( x4 G* B* _' n q+ J
// time, we create a Schedule that says to use the5 j: B2 Q1 r! I2 O
// modelActions ActionGroup at particular times. This
" Y8 J( z2 I2 M# R // schedule has a repeat interval of 1, it will loop every M1 x- X5 b# e+ h7 h! R1 J
// time step. The action is executed at time 0 relative to
, b' @ S% }$ p0 z( K" J# Q1 _ // the beginning of the loop.9 V; l3 t& f2 ^5 s# V4 O; c
: ?7 O; W0 c8 C, X8 O' Z
// This is a simple schedule, with only one action that is' s0 T; |0 Q" _% F7 f2 S
// just repeated every time. See jmousetrap for more
2 ]3 q# H! z2 C // complicated schedules.7 G& U% M* |, p2 {% t6 b
" j+ A; p* ~5 W ^
modelSchedule = new ScheduleImpl (getZone (), 1);
( l2 ^; f8 s0 K& h) K) z0 S, x modelSchedule.at$createAction (0, modelActions);
/ T, I1 n! P- h- J$ l% q* I8 N- t* X 7 p; Q8 _6 e4 z7 j8 Z9 Z
return this;: z. z p6 c9 R: }. b
} |