HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 b9 M6 N- ^- w! F' _
& v; n4 N2 J0 d$ E9 J public Object buildActions () {0 b8 {# o5 Y/ J
super.buildActions();
& M M1 j7 x4 ]- T* z
8 K- ?& h" M) H/ @6 n+ m( k // Create the list of simulation actions. We put these in
8 i5 b8 K+ z9 u7 l // an action group, because we want these actions to be: [" r1 B, Z9 k' f/ E
// executed in a specific order, but these steps should
: ^. ?8 ?7 Y; b4 R ` // take no (simulated) time. The M(foo) means "The message$ e r0 o. M7 C+ z# \! F7 M* k
// called <foo>". You can send a message To a particular! d4 I8 S2 \4 l$ S6 C
// object, or ForEach object in a collection.
& s/ T5 `& G* _0 q, \5 [, ?, ^ * G# G5 s/ F! {* H) l8 q4 S
// Note we update the heatspace in two phases: first run. h C( { P0 ?' Q
// diffusion, then run "updateWorld" to actually enact the
2 a8 D* {2 f1 d% h3 p P ?; z // changes the heatbugs have made. The ordering here is* F; g& c7 B. ` m; E- p
// significant!
! i7 a- p! r! z/ Z$ R8 t9 G 6 E. b F$ \4 R% Z: H
// Note also, that with the additional: X" p, @# n; O+ _3 ^. f; y7 w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ O. [% ?9 S$ B0 }% a // randomize the order in which the bugs actually run
0 H3 D# i- s' d# O- v // their step rule. This has the effect of removing any( i' ?$ P0 `1 [: I; R1 _& A; n
// systematic bias in the iteration throught the heatbug
) b w$ Z; h6 |5 w$ s" Z$ p$ F // list from timestep to timestep
( E8 a0 J' e/ s$ j9 H
( v4 g" T E6 K% M# ~+ n // By default, all `createActionForEach' modelActions have
* }6 C6 e h+ |- ~% M // a default order of `Sequential', which means that the
% O8 n- v' E$ L7 {* [ // order of iteration through the `heatbugList' will be8 V; U$ U* U3 a6 F( Q
// identical (assuming the list order is not changed
# B2 \* U* X, f Q# D // indirectly by some other process).4 p: d& U! E* J& `" K9 l3 Z
" p5 L4 b5 Q, b/ C3 b
modelActions = new ActionGroupImpl (getZone ());: I! V0 {% K& R
7 b) Q7 s9 H% U2 _8 d1 j# c
try {
7 a8 _+ n% z5 g2 d modelActions.createActionTo$message P9 y8 g) L o0 R" A
(heat, new Selector (heat.getClass (), "stepRule", false));
( C6 ^2 P" ~9 v7 H' k } catch (Exception e) {
, t/ V+ ^ r, { System.err.println ("Exception stepRule: " + e.getMessage ());
( M( l0 r: K0 q }. H- p' V) U# j
, x; j; J& V6 O" } try {
) i- s) c' B+ y3 ^0 r- V# g Heatbug proto = (Heatbug) heatbugList.get (0);
6 S& W' B* L% @% G: ^9 u Selector sel = ' h q# G2 O1 ]& i0 c
new Selector (proto.getClass (), "heatbugStep", false);* x% }; E- {* E' x* C
actionForEach =8 {2 s8 _8 g+ e
modelActions.createFActionForEachHomogeneous$call
( R& r1 {0 Y" P- r$ K (heatbugList," @' a/ J9 O5 z9 [. _. V3 N2 Y \
new FCallImpl (this, proto, sel,
2 z6 |# g3 [6 W" w5 H new FArgumentsImpl (this, sel)));
( T, C( N/ m1 v4 t G$ Q. U. l/ d } catch (Exception e) {
' g3 r I: L7 c- s; [* ~7 M e.printStackTrace (System.err);
( Q: Y5 A: ]% D5 j" k) h* n }" @. W2 Y: f8 t# Q1 U( d
+ f- W( _9 _, g3 N2 R syncUpdateOrder ();, X7 S7 o5 ]2 M9 R# G0 b
( R" J, M( f' I3 ?8 H9 G try {
* S+ `+ E5 J5 ^" U7 ^0 D. X3 X. b modelActions.createActionTo$message - X7 b. Z' [+ F2 P3 C1 [& G: A
(heat, new Selector (heat.getClass (), "updateLattice", false));3 g: j, \. P6 F8 E* {, Q6 g
} catch (Exception e) {. G) g G& Z9 a, |5 g$ X& q: |
System.err.println("Exception updateLattice: " + e.getMessage ());
9 e# z6 E8 U" J }* b7 i4 P' v3 ^; E" |5 d6 u% p* L
9 m( o$ |* X" j" i8 X; `
// Then we create a schedule that executes the7 _/ w3 C- a# v( B
// modelActions. modelActions is an ActionGroup, by itself it- C! S0 y h) D; z0 r2 R
// has no notion of time. In order to have it executed in/ t/ ?- N3 p" g
// time, we create a Schedule that says to use the+ a& ~" `( j3 C n8 l& E1 y
// modelActions ActionGroup at particular times. This
# A+ N( q9 f ]. M" [+ g. n // schedule has a repeat interval of 1, it will loop every5 N/ [. H. a' L& g6 {: b: T. d+ S
// time step. The action is executed at time 0 relative to9 d1 O0 v) b7 n1 @
// the beginning of the loop., q/ W: v; W9 u- x6 |+ x6 |) j
7 _0 p! k' t" u4 i# H! E: F4 ~
// This is a simple schedule, with only one action that is4 T7 ^( |- Y! `! l
// just repeated every time. See jmousetrap for more
' h1 T! V. o% X/ n; V // complicated schedules.
# I% C( W! H7 Z$ d 7 [3 _1 h1 e; i
modelSchedule = new ScheduleImpl (getZone (), 1);% w) g |8 v. X, s/ _
modelSchedule.at$createAction (0, modelActions);
, w$ p! y- @& K8 Q7 f9 C% l
, x. N/ n% P/ c return this;
1 r$ R3 O; g$ o; Z } |