HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ K! d% y0 R/ \3 L ?5 Y2 |, B. W. b
public Object buildActions () {% P8 v0 A) o9 T
super.buildActions();
1 L2 \( ]+ E1 C' K6 W6 Z. ~2 } / ~% i9 R$ V4 C; b% T3 X3 B
// Create the list of simulation actions. We put these in) J) N+ O- x$ ~5 r/ }
// an action group, because we want these actions to be- [7 ?) I% j, i" M; K2 i3 M" |
// executed in a specific order, but these steps should
) E9 v4 }5 q" N( C' ]+ X // take no (simulated) time. The M(foo) means "The message
Z0 G) J# z" x( U( q // called <foo>". You can send a message To a particular* Z6 m0 |, X; H% v" o
// object, or ForEach object in a collection." H, s! c7 S+ i5 o3 m
Z9 N/ z; O3 F; f& R
// Note we update the heatspace in two phases: first run
1 R" p( \% D( w7 N/ {# p- e // diffusion, then run "updateWorld" to actually enact the) Q4 D% n! G& y" Z. r# e8 X
// changes the heatbugs have made. The ordering here is6 S. a# Y! Q7 e& |: J
// significant!7 Q: y8 ]0 Z6 L8 W) y D
/ |& |6 N7 C8 }2 J
// Note also, that with the additional! v; q: a w' E/ O& R2 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can. d) P2 c, D! _4 U' G
// randomize the order in which the bugs actually run) B& D% z" t$ @3 Q. [
// their step rule. This has the effect of removing any
3 K3 B* F, o. l // systematic bias in the iteration throught the heatbug
( u3 v, }( [9 W: B // list from timestep to timestep
! l: O) z& U: L# S , j( g8 Q9 f9 v$ J A! ]3 Z
// By default, all `createActionForEach' modelActions have
/ Z& R, S D! t: A // a default order of `Sequential', which means that the
1 ^% K* |; B6 U1 R6 @# u // order of iteration through the `heatbugList' will be% R3 T4 M U4 e4 z# l9 t
// identical (assuming the list order is not changed
9 ]; z) u4 i0 a/ l, F( d5 a' R+ _ // indirectly by some other process).
9 @3 [1 k! L s* K8 r% A
1 o- [7 K1 n* F- d |' o9 e9 C modelActions = new ActionGroupImpl (getZone ());
; E* s" t" Q" t. T1 V( G! S
, G4 v! j, Q' x try {
: O# S, W. r* ]/ n modelActions.createActionTo$message
- g9 N) B4 [" ^& j5 s& k7 { (heat, new Selector (heat.getClass (), "stepRule", false));( Z; v2 f$ G; u; c
} catch (Exception e) {
3 N3 y7 ^0 V; y3 `8 f! F System.err.println ("Exception stepRule: " + e.getMessage ());. D" w# B) r+ g, _2 [9 H$ h6 e1 t
}6 q0 C+ W/ b% G K- R
! {. E! q6 A% i9 _- @0 a& R6 a try {
) X5 H" G/ b. h. |* z. @0 ^% ? Heatbug proto = (Heatbug) heatbugList.get (0);& A+ F1 q4 N! H% M1 e- X6 m1 M/ u; g
Selector sel =
3 b$ W/ F9 A4 t/ Y' V5 X% q new Selector (proto.getClass (), "heatbugStep", false);; k5 z5 m$ c+ q3 l
actionForEach =
; `$ z" Z- z4 }; K5 a6 e modelActions.createFActionForEachHomogeneous$call/ [: p f- e0 M2 u/ \
(heatbugList,6 R7 F6 e5 {! P7 [$ X( X: E# ?0 G
new FCallImpl (this, proto, sel,
: c( k3 L; H" ?, Y+ M, N new FArgumentsImpl (this, sel)));
, s- n& \7 ]; d( Y" m- L } catch (Exception e) {3 E! }$ L8 L& l% O4 q& z& u- U5 Y
e.printStackTrace (System.err);+ N4 X3 c$ ?% c% D
}
( ?/ {/ z3 f2 B/ F- u! w
5 `$ f) ?4 z/ K$ @ syncUpdateOrder ();
9 ^* ^- e8 U: e8 p/ }; Y
7 \9 k4 u# C3 ?2 x. R5 K try {) t* H9 |3 K! }3 w( k; J
modelActions.createActionTo$message " W$ E' x7 _0 h
(heat, new Selector (heat.getClass (), "updateLattice", false));
) w' e0 l+ K# z } catch (Exception e) {
0 ~+ O& U A5 D/ \+ F System.err.println("Exception updateLattice: " + e.getMessage ());
8 f$ y x' J; ~- M7 W( {+ R }0 y/ @7 o% N# _! l7 r* c9 j5 _5 ^
& d9 C( Y. W% u. o; E1 ?4 e* b // Then we create a schedule that executes the: Q& r/ @8 \, }* L( H) c
// modelActions. modelActions is an ActionGroup, by itself it$ e7 L5 J1 I e
// has no notion of time. In order to have it executed in
: |# I8 Q+ }$ w3 n: X // time, we create a Schedule that says to use the
: T& p4 T- B0 L7 Y `. g8 S // modelActions ActionGroup at particular times. This
% }9 t& {) L* L // schedule has a repeat interval of 1, it will loop every
- ~3 @( l* v; F& S/ Z, h" ?" E // time step. The action is executed at time 0 relative to7 O; I3 G( ? p9 M3 K/ w) \7 j: ^# u
// the beginning of the loop./ y, ?+ E* V9 G; I
: R6 Q; ^6 L# H( _; z) _ // This is a simple schedule, with only one action that is
* m3 |9 O/ N& g4 v% w) R& w // just repeated every time. See jmousetrap for more
) g8 ]' M7 P- v4 p+ e // complicated schedules.
0 d- b5 h* C) v
% g: Z; q$ p1 Y& J9 E9 a3 p modelSchedule = new ScheduleImpl (getZone (), 1);" r, d! s( r7 O6 g; `
modelSchedule.at$createAction (0, modelActions);
) o# g( l. b4 L2 M& G: h
+ u" R D' B1 d k. n return this;$ q2 P6 r. m" l# W5 r' c
} |