HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 v' l% \5 ?, a+ [8 Y
- I q5 P& l+ p& @3 `% i% O public Object buildActions () {. ]- P1 V `/ q" M. I
super.buildActions();
* v: s. a' s1 B, E$ w7 d0 K/ h . L% L" z8 i f- T( U
// Create the list of simulation actions. We put these in
3 c) @: `& y+ s* q // an action group, because we want these actions to be
8 F7 U5 v3 D4 z) n3 b+ T5 ~# R // executed in a specific order, but these steps should
7 ~2 C2 j$ s( Y9 ]; E! e* C // take no (simulated) time. The M(foo) means "The message/ k U( _6 O- i4 B
// called <foo>". You can send a message To a particular( }3 i# ?4 C2 p9 \
// object, or ForEach object in a collection.5 S# M7 |% q6 [- |% c3 y4 G% v5 S8 B
" b ? z$ r) a // Note we update the heatspace in two phases: first run+ S' g8 v: B. N, |7 g
// diffusion, then run "updateWorld" to actually enact the
0 K# b& U8 ^* a3 V8 T // changes the heatbugs have made. The ordering here is
- [) ^2 U9 V9 V9 u( C; E // significant! u$ f" |( D; p( H5 J
1 A' _% Z7 l) N- I5 x! Z! v, b( ? // Note also, that with the additional
# v! q/ X+ Y. Q2 G% j$ ] // `randomizeHeatbugUpdateOrder' Boolean flag we can
i, ~2 C' o2 t7 S' B | // randomize the order in which the bugs actually run! I+ L, V$ k* ^2 j9 q
// their step rule. This has the effect of removing any9 j) c l7 K; @4 g
// systematic bias in the iteration throught the heatbug
1 v6 i% V6 q- D! F // list from timestep to timestep
7 u8 f6 h. D% G 9 j. X; _1 {! B/ R) I9 y$ z1 x* ^. |- J
// By default, all `createActionForEach' modelActions have
# N) s0 P" Z- b5 N0 P: I( m* R // a default order of `Sequential', which means that the
9 F- [6 P2 F1 w! Q2 f, K9 k1 H+ Z: _ // order of iteration through the `heatbugList' will be
; P! W! |5 g# k8 A( H! O // identical (assuming the list order is not changed
. a. g6 }) T7 g5 \- V0 f* H // indirectly by some other process).
/ [5 B" O- j& F' D3 W7 B
6 t& }& ^$ e& |% f modelActions = new ActionGroupImpl (getZone ()); J+ c: ~6 Z9 S* P' f( X. S
- R' k! }! o# ]* T7 ^/ j try {$ v7 {- B2 }5 ^: x
modelActions.createActionTo$message
3 D8 }6 x4 l9 N7 f& Y (heat, new Selector (heat.getClass (), "stepRule", false));
) h+ I) c( _# } } catch (Exception e) {' H9 p2 A; ^+ I
System.err.println ("Exception stepRule: " + e.getMessage ());
4 o. |) I+ O: l, g& E }
, a. a2 h+ K" C. b0 I9 }6 H5 S8 r/ m8 _: Y" K
try {& a. @: O; }: H& g
Heatbug proto = (Heatbug) heatbugList.get (0);
& _: U' C1 @8 Q. ~5 D E: ~* ]7 K- T Selector sel =
' N2 g" P4 m( E" H2 ~ new Selector (proto.getClass (), "heatbugStep", false);
! F0 _. B$ ^+ l4 w! t) a1 J5 w1 L actionForEach =
) Y. s) E: N( I/ A8 L modelActions.createFActionForEachHomogeneous$call0 M" b7 e2 x! ?5 E2 l/ ?" E7 s
(heatbugList,
. @3 g! ~+ R' |. f9 {: [ new FCallImpl (this, proto, sel,
T. b; {; K* S' D" Z" P new FArgumentsImpl (this, sel)));/ L8 M2 }) J, O0 R5 v) \6 ?: K1 [
} catch (Exception e) {/ X. Y o, F$ M: q
e.printStackTrace (System.err);
' w$ j3 u) P) k& M/ M }4 b( v' c' [9 ?7 Z8 ~- x8 [
" A3 a% t# y5 u% C
syncUpdateOrder ();5 |; R1 g+ {7 x! F( G5 o
, A: Q8 K9 u9 j
try {; l2 W5 ^ |2 c
modelActions.createActionTo$message
% Q# ~$ n& v" }2 m (heat, new Selector (heat.getClass (), "updateLattice", false));
. y1 G! Y, b A1 C. O/ w/ e } catch (Exception e) {; i8 X, p7 ^+ S/ k0 \2 E
System.err.println("Exception updateLattice: " + e.getMessage ());
& Z w' V/ D7 l9 s* M/ f7 l }8 _" V2 z1 ?) l8 t% Q
4 h6 x& w" g/ y, a R7 u$ Q7 w% a; b
// Then we create a schedule that executes the
. J- J6 f7 _& f5 y$ Z* W, S // modelActions. modelActions is an ActionGroup, by itself it
* x9 j }- d' Q* B& a5 a5 J) l* e0 D // has no notion of time. In order to have it executed in
4 t4 J# z9 L0 ] // time, we create a Schedule that says to use the
& @+ M( k; k) w // modelActions ActionGroup at particular times. This
. r# O F# D( Y // schedule has a repeat interval of 1, it will loop every
: s0 \, R8 B' \- v // time step. The action is executed at time 0 relative to: V, n; ?% B; z5 s
// the beginning of the loop.
- h- Z3 q( [- Y7 M. K8 p$ g& Z4 Y0 A; T' Q3 p' g: z) w* \
// This is a simple schedule, with only one action that is" B! G! n; l5 Q3 {, ?, [
// just repeated every time. See jmousetrap for more7 [0 o: A- m; J; \" l" d4 y
// complicated schedules.+ j- o& p( M+ }" e- V
; ^+ T6 ]$ M7 }' ]1 E8 i, x% X% e modelSchedule = new ScheduleImpl (getZone (), 1);
/ n/ M5 h. @% J+ [3 x modelSchedule.at$createAction (0, modelActions);
* v5 ?: g* p, L1 I+ T1 K' W# N& F
$ z4 L9 `( Q. o* m7 L return this;0 F5 Y S8 k% F
} |