HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 l! F) G9 o) K+ @5 P/ ^
( P) Y9 H4 a" ?" g2 F
public Object buildActions () {, H1 X) S; o: m. y/ P3 T+ C6 q
super.buildActions();
2 ~/ G$ i, }& x" i$ q0 v- L 4 R4 T( u9 H0 c+ M) }8 A. b' Q
// Create the list of simulation actions. We put these in
6 b' ~* a- m+ U) \& t% B( `8 C // an action group, because we want these actions to be
3 h, M( [, Q) k& A- ~ // executed in a specific order, but these steps should
0 T: b" ]+ c1 i: ^: J4 w) W# ? // take no (simulated) time. The M(foo) means "The message) M9 i& K6 [/ {1 F) Q* E, n
// called <foo>". You can send a message To a particular
8 v4 x9 I9 u# t% P7 C9 V+ z. L // object, or ForEach object in a collection.0 P5 M( d' c& C# e
& u. ~4 l+ f% u5 Z% I // Note we update the heatspace in two phases: first run
: j4 X2 _$ h2 \ // diffusion, then run "updateWorld" to actually enact the+ p/ }2 W9 i) \) l7 n+ C
// changes the heatbugs have made. The ordering here is
Z* o4 s7 \- T/ S. O7 o l8 D$ _ // significant!
- h+ P( |' h/ Q$ A
& |) \- D7 P0 Y6 I; f9 }. t // Note also, that with the additional1 w6 |, n8 Y5 Z8 G7 N5 Z# K8 `9 p
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ a/ H) H$ Z& l' |1 Q. m% P v
// randomize the order in which the bugs actually run
6 h( n: _) o9 O1 p0 `# ?! o // their step rule. This has the effect of removing any
! y1 T; k K! s! @3 |5 [ // systematic bias in the iteration throught the heatbug
' _8 N8 q+ W6 E2 i" b // list from timestep to timestep/ B# |) e8 u1 J$ i1 r1 o: f Z2 d
% w. L! o! p Q) u+ M
// By default, all `createActionForEach' modelActions have
2 r7 A* }0 n$ ^: _( v- | // a default order of `Sequential', which means that the
: p# Y) Z8 ?1 S2 @5 z4 a* d' l // order of iteration through the `heatbugList' will be/ q9 ~/ m# ^" I$ P0 h$ n+ L6 I
// identical (assuming the list order is not changed0 A$ M- t* d- @1 b/ e7 T& s
// indirectly by some other process).
0 d$ b N$ @3 f. N9 i * _* p3 o2 ?$ ^3 g5 y$ k8 y
modelActions = new ActionGroupImpl (getZone ());, a" g. l+ _+ @/ M
4 D( c p4 T& ]$ _7 \9 |# w. ?
try {5 d; p0 E K" f" q: f
modelActions.createActionTo$message6 a8 g) s" w# H! E7 h6 ?" |/ U
(heat, new Selector (heat.getClass (), "stepRule", false));- F4 M' }6 s& z: J I; r5 O
} catch (Exception e) {; F0 G$ j7 K1 Q8 b& P
System.err.println ("Exception stepRule: " + e.getMessage ());
4 A" G4 I3 k. ]( C& J6 T }
6 C. D* _- X" Z0 G) h& T
# ]0 j2 {; }( M) ?% Y; q( R9 K try {
5 r* y4 U m4 h' P5 [4 O Heatbug proto = (Heatbug) heatbugList.get (0);
) y; W* g7 y' } Selector sel = 9 u) K; w6 A+ R
new Selector (proto.getClass (), "heatbugStep", false);9 n u* @; |7 V' S
actionForEach =
0 a8 w. W0 ~; Q( J/ O modelActions.createFActionForEachHomogeneous$call
/ b) Z4 m4 E$ ^- R0 D2 q (heatbugList,, l& {( m. D' o, A& E* O
new FCallImpl (this, proto, sel,
+ O. U2 q, C4 m) }6 L new FArgumentsImpl (this, sel)));
% l3 X/ s' S! d2 Z( k) | } catch (Exception e) {3 n: w3 g: L$ A
e.printStackTrace (System.err);
3 c' p6 N2 g+ S( t6 x8 x }
7 b5 q/ h/ N; {+ y% d$ e8 E$ {
: }9 X# m6 Z7 T syncUpdateOrder ();
; F7 M9 U" m/ \5 W7 X
0 h& S5 F; q( e; h! ?1 J: L/ b try {3 Q( _. H! k# j8 Z. D" X+ M
modelActions.createActionTo$message 4 b* }1 F8 G1 `. a1 _( S
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ M0 }6 ?+ V' X+ b: y0 p: A } catch (Exception e) {8 m8 B6 f) e! X9 E& \
System.err.println("Exception updateLattice: " + e.getMessage ());, v7 O+ v5 z/ P5 s/ R4 p d# E
}
/ P" e3 [" @8 J. K % V* S/ u2 `% I/ G! l# R! z
// Then we create a schedule that executes the
1 o ^3 g9 J" C1 n // modelActions. modelActions is an ActionGroup, by itself it
& |# r2 w& Q, }- a$ {: Z // has no notion of time. In order to have it executed in6 \4 U Y: t" A$ o
// time, we create a Schedule that says to use the
# X. i5 x3 o' A // modelActions ActionGroup at particular times. This! f8 l' l& b/ [# G! T
// schedule has a repeat interval of 1, it will loop every
* X$ a- p+ F0 q4 p/ \ // time step. The action is executed at time 0 relative to
- W' o/ F- J/ U' _ // the beginning of the loop.
+ X8 f; }+ K- V" v0 M' `0 E4 \0 S$ @, m3 N1 P# K( |2 I( D
// This is a simple schedule, with only one action that is
. l" Y# o5 e5 Y0 \# B7 V // just repeated every time. See jmousetrap for more
& X: g; V8 b4 D: z3 P // complicated schedules.& W. O* ~, t# O
3 I5 Y; m" S2 ^! r; I4 @ modelSchedule = new ScheduleImpl (getZone (), 1);. e" G6 E* M; D
modelSchedule.at$createAction (0, modelActions);# c+ {/ L3 `+ ]
0 p/ O! Y0 ]9 U% w7 Y/ @ return this;
! {9 q8 D* M- n+ M' A, } } |