HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 h# ~2 D3 ~' \% s
' B" z, U9 q2 M% q4 G public Object buildActions () {
! E( r4 _6 v _7 h+ q) j% s super.buildActions();
! F U1 f9 F: B/ Y
% Z" a. {& r/ E% V0 p* V2 X // Create the list of simulation actions. We put these in9 [/ {9 g; g ~) s: a, M2 o" a
// an action group, because we want these actions to be3 G& q- ]9 T, q( {5 R
// executed in a specific order, but these steps should
1 ~8 r' h' P, j // take no (simulated) time. The M(foo) means "The message
# p6 A( W/ w0 E // called <foo>". You can send a message To a particular. M p5 h/ ~3 W* O- e6 E, z
// object, or ForEach object in a collection. m& @+ ~1 z& D
/ }) n* R; N/ x( G
// Note we update the heatspace in two phases: first run6 _. }; v1 ^& q. ^
// diffusion, then run "updateWorld" to actually enact the* a- @: p2 Q+ {8 Z
// changes the heatbugs have made. The ordering here is
- a) P4 J; B5 V& S+ K/ P7 G // significant!
" X2 X2 }5 s, c! O
/ D, c1 a5 w4 p6 T // Note also, that with the additional! P" L3 r I/ q; g
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: k/ y5 Q) z5 ^; q% k4 O // randomize the order in which the bugs actually run
! R0 L! p8 B( I# o" U1 Q, F& x // their step rule. This has the effect of removing any% G# O$ R: `- ~. o3 L9 g' g" M0 p" F
// systematic bias in the iteration throught the heatbug5 @1 y: }: _: P# M
// list from timestep to timestep) f' A4 |+ l1 K) o/ x; C' h& z% w
2 A) o7 ?2 e; D( J2 u+ B // By default, all `createActionForEach' modelActions have
+ m" w d" b* o3 q; L" S // a default order of `Sequential', which means that the
. K% ~! }% s$ J- R. r // order of iteration through the `heatbugList' will be
) W: ~# f. y3 N! \+ d // identical (assuming the list order is not changed3 r4 a3 f0 N7 ~+ ~# d5 a! E
// indirectly by some other process).0 z: B' e, B+ f7 T) q
5 c) W- W% W* z
modelActions = new ActionGroupImpl (getZone ());) u4 J5 j3 c/ w" m* z0 z3 ~
& F% T& F$ z& S+ O, K# ~( p try {
2 D9 h H3 f1 }: ?) Y, r# f modelActions.createActionTo$message# C9 G: k8 y9 P* A9 D; x" g T
(heat, new Selector (heat.getClass (), "stepRule", false));
5 B0 E Y' x8 Z1 J* e. y2 s } catch (Exception e) {) u. d( t% x+ H# S5 Q' e, l; z
System.err.println ("Exception stepRule: " + e.getMessage ());
: n, \2 L/ ~" m9 x2 _ }, t7 F5 N v: S% ]
" ` f7 j" W, e" Z' U! Y try {$ d; ^" [. ?0 G2 O! ^2 u1 y( T( H9 w0 l
Heatbug proto = (Heatbug) heatbugList.get (0);
& ?( a1 c i( ?; g4 o9 X) w Selector sel = & g5 \+ C1 a P/ X$ s
new Selector (proto.getClass (), "heatbugStep", false);
; E9 A3 H1 L1 i actionForEach = l! I' P8 |/ y
modelActions.createFActionForEachHomogeneous$call
]" N$ F9 |& r. {4 H) Y (heatbugList,
* a9 P& {! I4 j: T) L new FCallImpl (this, proto, sel,6 H# R z# B3 S# ]+ r- ]% H
new FArgumentsImpl (this, sel)));. z: B) Z$ {, i) x$ S
} catch (Exception e) {
0 u9 ^6 k1 k$ U( M+ |* `3 y, S e.printStackTrace (System.err);0 ~* ~ Y* y+ @( [" [! d
}0 [2 V" C& J! I% y# L
f3 ]# {% O n$ y
syncUpdateOrder (); k; f, l2 C; v+ D9 q- Y# K( F) O
2 F" n1 e: K; H1 x try {
4 H! k9 d( l4 L' h3 Y modelActions.createActionTo$message
' w, J# ^ t0 W9 |# i/ u (heat, new Selector (heat.getClass (), "updateLattice", false));% O& n# j* U. a) z, }
} catch (Exception e) {+ S$ y7 r0 ~5 P8 e" N- C( o
System.err.println("Exception updateLattice: " + e.getMessage ());
- R3 f3 j: f% v2 n) c+ b/ ` }
! z9 |7 r/ D i, I( p4 ? 4 T- C" W" y, r* u6 I7 z
// Then we create a schedule that executes the/ o* \/ U. y" A0 a T/ E6 o) {8 o; \
// modelActions. modelActions is an ActionGroup, by itself it
- j Q& J9 |! `/ a# A6 w // has no notion of time. In order to have it executed in
' F" X. o' G) U' }7 o2 L // time, we create a Schedule that says to use the4 b! @4 G6 U T1 t K5 }: [
// modelActions ActionGroup at particular times. This. W" F& K- I2 k# h
// schedule has a repeat interval of 1, it will loop every* B& `3 d+ m4 A
// time step. The action is executed at time 0 relative to" p- I9 T; m; h1 \* ]/ d
// the beginning of the loop.. C% |( C9 {0 \, n3 Q- }0 G
# {. t4 {+ {( S0 Z$ d" U: b7 r // This is a simple schedule, with only one action that is
- s/ g+ g3 w8 O. e; f // just repeated every time. See jmousetrap for more
3 ~ P/ b: o8 u# k // complicated schedules.
4 s9 D5 f y' U4 n7 z ) z# ?6 O4 j& k8 Y
modelSchedule = new ScheduleImpl (getZone (), 1);# d7 O1 X. R9 e4 d; D) F, }
modelSchedule.at$createAction (0, modelActions);7 o6 X) Y2 q. q7 o, h3 e
3 n P5 W3 G2 i9 R, [1 ^( l7 J
return this;) m# |, j3 t! f. Y: l+ E+ j! x: N9 T
} |