HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. |5 O7 q' a* R3 k3 e& ^9 i
/ v- ?) V( P1 N4 [, {% c$ M3 F0 c
public Object buildActions () {# b+ f( s3 Z( l. a
super.buildActions();
- d+ j& R5 J# @6 g* h
$ E, W& F! \% y5 k b3 Q // Create the list of simulation actions. We put these in
. Y6 u* I. [& m4 {$ Q // an action group, because we want these actions to be& |* b) f8 d7 _% Y0 _
// executed in a specific order, but these steps should s: ?- N2 G: u! b5 U- y* j5 }
// take no (simulated) time. The M(foo) means "The message
7 Y* n7 a% W& _9 o // called <foo>". You can send a message To a particular
% c: k' W$ e! U8 S' z // object, or ForEach object in a collection.
: {: x9 B. s+ \ ?0 |) S
, d! J6 z) E3 Y8 N. k& ` // Note we update the heatspace in two phases: first run. e) T' b5 Y) c" z: X/ g
// diffusion, then run "updateWorld" to actually enact the- n6 Y) _6 H( S4 i& F) H; t7 j* e( H
// changes the heatbugs have made. The ordering here is
. N- ^$ y! o5 T; j2 @$ [ // significant!
9 E! |( ^8 f% F7 [0 ? 8 r) F5 O# P8 Y% O) [1 K! r) E5 M; c$ @0 [
// Note also, that with the additional
. q7 U' p0 {0 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can- G/ R6 i7 P7 r
// randomize the order in which the bugs actually run
( U- C0 j6 E* [0 B) C' q // their step rule. This has the effect of removing any
+ [$ M2 L; C+ y6 Z // systematic bias in the iteration throught the heatbug
' @ N/ c! J$ W8 Z, p( j' h // list from timestep to timestep
! _3 g! D$ K0 M9 R r
+ I3 l4 y6 I. I; P+ C3 z' s$ l // By default, all `createActionForEach' modelActions have
: X+ h, q/ \, X' e6 V8 V- c // a default order of `Sequential', which means that the
; A4 q7 b6 b v# D // order of iteration through the `heatbugList' will be
@( l$ y, m. ?( J( n* c // identical (assuming the list order is not changed
% T% e( |0 n @5 S // indirectly by some other process).) }) V) Q" E; i1 H0 p. G) L5 o) ]
0 \' J% I$ H+ J6 q( S4 _ modelActions = new ActionGroupImpl (getZone ());
; C4 T2 @" Y: k/ ^% R$ E+ t# Q; c) c ?
try {4 M$ S: B( j; F6 y. s D: w! L6 f: g
modelActions.createActionTo$message
$ u' ?1 J) j/ _1 ]1 h T (heat, new Selector (heat.getClass (), "stepRule", false));/ |; M6 m) V( U: C
} catch (Exception e) {( X& Q6 [7 P. ^; R
System.err.println ("Exception stepRule: " + e.getMessage ());+ C& N. E4 c% R
}
. U' E7 M3 L3 B. e0 ?
/ l- G- X! _$ Z! [: c+ L7 P# F7 B5 | try {8 e/ B% {$ K: O# g2 ^
Heatbug proto = (Heatbug) heatbugList.get (0);
+ {4 `- S) V* E# B Selector sel = * m0 b* W C6 M
new Selector (proto.getClass (), "heatbugStep", false);
# Q; Y$ n. Z4 \' @ actionForEach =4 T, ^5 F. B+ ]" q: i
modelActions.createFActionForEachHomogeneous$call/ l7 J! O3 x; L- q3 w
(heatbugList,
0 E; D6 ~- \" @$ @+ m* T7 R new FCallImpl (this, proto, sel,
. b' U% R1 i# h, S% I new FArgumentsImpl (this, sel)));
! ` Q8 g5 m) s0 H" ~' b% t } catch (Exception e) {; P* R7 J2 X; P" J: i
e.printStackTrace (System.err);+ {1 O6 i- a. Q0 b
}
3 `% |3 W# I5 M# G* Z! h* P$ {9 C
8 @* \/ ?* s$ W! u ?$ E syncUpdateOrder ();2 T- e7 g5 {* D8 F9 s3 h
) a5 e8 J1 T- Y2 A5 S' O+ X
try {! k4 [3 S* L1 m! f O2 d
modelActions.createActionTo$message 0 P! @8 u9 ?+ R3 C! m5 B
(heat, new Selector (heat.getClass (), "updateLattice", false));) T& I3 `4 w9 @, c+ Y1 z0 `3 z
} catch (Exception e) {
5 I( H/ \" S! h0 D% Y9 T System.err.println("Exception updateLattice: " + e.getMessage ());
. I- x* e; ^& a& P/ I }+ |, _ _/ s; R0 t
, |! W* \$ A" c+ N // Then we create a schedule that executes the
+ N" V, b8 Y, J& U2 V" o5 o // modelActions. modelActions is an ActionGroup, by itself it/ g9 [4 ~ S( N9 e
// has no notion of time. In order to have it executed in' d2 W" {. X: E9 ?
// time, we create a Schedule that says to use the1 h a# y2 C$ k' p0 N3 d
// modelActions ActionGroup at particular times. This
' h4 i2 w* v6 E& x' Z // schedule has a repeat interval of 1, it will loop every) I# q; n w- T w* c
// time step. The action is executed at time 0 relative to
% O( u8 p+ M9 @% ?) r" K // the beginning of the loop.
6 @! d* u" {% Z5 ~: l7 ]9 L& l3 E' S) e5 X
// This is a simple schedule, with only one action that is* D9 T! o: U" q- r, V& D. w4 b
// just repeated every time. See jmousetrap for more
- \4 j; o5 b& [ // complicated schedules.
+ }. T, ?( F* F, g; s
" a+ K3 |5 @/ o! @% ~0 B modelSchedule = new ScheduleImpl (getZone (), 1);0 x* ` |! T1 ]7 a
modelSchedule.at$createAction (0, modelActions);
" ^8 z2 R7 I8 t1 i$ k% z/ e9 H
2 P( ]( q) u- G return this;/ J& N W. v( D8 w: L- f
} |