HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 C3 [2 ]2 `7 }8 U! E5 ~
, W J( p& c/ V) Y public Object buildActions () {
9 H: e' T! i! J super.buildActions();0 m4 j* H, g, f% M0 G1 E
6 N, {& P# B c) K0 F$ \ t5 \
// Create the list of simulation actions. We put these in" z! r# X- l" t3 G8 L
// an action group, because we want these actions to be
9 e' \( [& c: D% A( \5 e+ a3 H // executed in a specific order, but these steps should1 S" n. s1 X' Q0 X
// take no (simulated) time. The M(foo) means "The message2 b$ m; k: d+ W8 Y' Z" p7 o1 @; u! {
// called <foo>". You can send a message To a particular
/ y1 U+ s x8 ^' _ // object, or ForEach object in a collection.
# A7 @% l6 n% Z6 p+ h- F $ {/ Z5 t* M9 d
// Note we update the heatspace in two phases: first run
9 y$ z- V$ [8 Z" y // diffusion, then run "updateWorld" to actually enact the
7 f8 u% O2 p$ n2 O% K2 q; | // changes the heatbugs have made. The ordering here is. M2 e- o3 f* I4 E. C
// significant!( Y1 x l, L0 W: b+ h x I
+ `% [1 }7 c2 o$ h( O8 y( h
// Note also, that with the additional
; K; Q5 [& J9 E# r% O# P# a // `randomizeHeatbugUpdateOrder' Boolean flag we can
, _9 w& L2 _1 [5 l% K // randomize the order in which the bugs actually run
9 F/ X. [0 E5 @ // their step rule. This has the effect of removing any# u; [$ B. a( _$ K* F& {' r
// systematic bias in the iteration throught the heatbug, X. D1 q% _5 K5 E; u" n' n4 X* q
// list from timestep to timestep* F I$ ]* J- n' V) h
( Q" k3 L6 |) _+ B* Y // By default, all `createActionForEach' modelActions have
8 G" g" ?) v5 H7 n! V# E' m // a default order of `Sequential', which means that the" v9 a6 |( W6 t/ A
// order of iteration through the `heatbugList' will be
3 a9 H! M' I0 p7 _ // identical (assuming the list order is not changed0 e. G$ E9 s1 ^/ }6 l2 w6 V
// indirectly by some other process).
V( L$ ^$ f9 q
0 B; K8 f& H! T- p- G3 ~ modelActions = new ActionGroupImpl (getZone ());
# E/ F" W; o% G: Q3 V' S' S( |4 l- M9 ?1 L
try {
6 f3 Z& f- S1 [" t2 R modelActions.createActionTo$message
" Q) v4 i* R( v, _" W, j5 c (heat, new Selector (heat.getClass (), "stepRule", false));
- P) [9 B) z( b) S% v+ D2 f } catch (Exception e) {0 @% V4 g+ X. ~% r, e* f! p" A
System.err.println ("Exception stepRule: " + e.getMessage ());1 ^8 B) n7 E/ Y) B( R: q: u
}) G: B$ y3 J2 ?8 v' x$ ^! W
1 H% W. U! u6 F3 ~) \+ I+ W try {
& F) I9 D% X, f& l3 r" f$ i& B9 ~ Heatbug proto = (Heatbug) heatbugList.get (0);
" P+ X% G& P! X4 j7 ]: q+ i Selector sel =
6 ]3 N9 ]. D7 u+ b new Selector (proto.getClass (), "heatbugStep", false);' L4 e+ S( ^$ k+ a" j/ l( W
actionForEach =
( U- p* R4 ~# S. J( C modelActions.createFActionForEachHomogeneous$call! f6 l% X# H; o: f
(heatbugList,: n( I/ }! G: M/ J0 ?
new FCallImpl (this, proto, sel,* A: D- ~" y+ }! ?* ^# Y. O4 ]
new FArgumentsImpl (this, sel)));
! p; E" m4 a: S } catch (Exception e) {" j4 D$ m2 T. u# A
e.printStackTrace (System.err);3 z) _8 O' i7 ?8 D
}3 ]' o" W3 @5 A& Z/ b! Y# t
& \0 E3 X1 e6 s# [0 {9 R
syncUpdateOrder ();9 v2 U. m1 i3 {* Y
! I \# c6 c3 Q: V* r, _& h try {& C' P& ^( N; {( M7 @5 v4 c$ J2 p7 v
modelActions.createActionTo$message
# N. U0 n6 X4 _: x7 ] Z (heat, new Selector (heat.getClass (), "updateLattice", false));
0 x' R. ~, w- b* o; Z$ J! [ } catch (Exception e) {
) I- i% R: r$ i A System.err.println("Exception updateLattice: " + e.getMessage ());$ y8 x5 o, u! e5 N3 y+ o1 Y
}# ?2 M3 q& R0 Z# @
5 z$ U" d( m4 |9 G6 |' H
// Then we create a schedule that executes the! l! E4 r/ Q- ~2 f. k
// modelActions. modelActions is an ActionGroup, by itself it: G7 p4 |+ m8 @; I: y( h
// has no notion of time. In order to have it executed in/ D, x0 {7 X9 C5 w' k- y P& ?
// time, we create a Schedule that says to use the4 @0 B" R7 g; J. _
// modelActions ActionGroup at particular times. This
* R5 D; F8 c3 ^0 i( I // schedule has a repeat interval of 1, it will loop every6 n& Q4 c$ O0 e( v5 \/ v: }: o1 X
// time step. The action is executed at time 0 relative to
2 v- C* T6 E& l9 R1 s! { C9 H // the beginning of the loop.
. l9 x: a8 U6 F: D' \! c- D# k6 A
// This is a simple schedule, with only one action that is
+ C: s5 D ~0 O4 x3 V! D/ k4 u // just repeated every time. See jmousetrap for more8 c! V. `5 b5 P6 R! w5 |/ t
// complicated schedules.
/ E% z' M6 a' n7 a7 R% Y+ C5 e% P 1 R' e' Y( n) C0 ^& h: g- U. n5 Z8 X* ]
modelSchedule = new ScheduleImpl (getZone (), 1);
/ [. j' L* F* D, d modelSchedule.at$createAction (0, modelActions);4 Y1 b1 y6 E% j
, V+ D- m( z' }$ g return this;0 \9 X1 V8 W6 K- H2 K
} |