HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) a2 Q* I+ W- s" E+ }) E, R% e1 S+ { {) K4 u, E
public Object buildActions () {
# s) \: M. H# M0 }& S super.buildActions();6 |2 i, |, |0 {. d2 J: W) S
3 u: d$ T/ V, b. p! U/ W! h* a
// Create the list of simulation actions. We put these in
' A F/ p6 I, `2 f6 Y) ?5 d7 K) M9 ` // an action group, because we want these actions to be
) r7 W1 O+ C" |9 X; t // executed in a specific order, but these steps should5 b& X/ e- g2 R- |8 K
// take no (simulated) time. The M(foo) means "The message F& a. f! @/ O; k- S( ?
// called <foo>". You can send a message To a particular
% D! {8 o' W* |8 n) }- z1 q; J9 g // object, or ForEach object in a collection.
+ U- s5 |8 b9 @/ G% c , q4 h0 j; c6 J$ l# A2 b% h
// Note we update the heatspace in two phases: first run
4 i% k; R \6 y8 [ // diffusion, then run "updateWorld" to actually enact the3 J( u- x" |/ g! O
// changes the heatbugs have made. The ordering here is
0 M" |+ X( ^. J // significant!
' \( A/ M( T n
$ K& ]8 i6 t( T4 b7 S4 s% y6 p // Note also, that with the additional
$ y# ]- |; ]# E2 X5 w // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 F9 |# I) B9 Z // randomize the order in which the bugs actually run* L2 R8 c+ m/ h! P) L# t$ y& r! c1 e* f
// their step rule. This has the effect of removing any
; V; q* Z8 ^: s# n' S+ \ // systematic bias in the iteration throught the heatbug3 ]$ h) |2 c" K' ?9 {) _& R' S
// list from timestep to timestep/ U) I1 O4 F- V! Z+ G2 [ k
& N( _) k$ j: U+ V
// By default, all `createActionForEach' modelActions have
$ ?( e# v% E; ^! g6 ?/ S _ // a default order of `Sequential', which means that the l; O& {9 |+ ?
// order of iteration through the `heatbugList' will be, T' m! x. Q4 `6 i
// identical (assuming the list order is not changed* N$ K# `6 `7 a1 z8 x
// indirectly by some other process).
9 f: A' e5 |0 L7 a: ?
+ A& W+ d0 C& r+ p$ Y modelActions = new ActionGroupImpl (getZone ());# x, I2 O; Y0 W+ o; d9 ~) `
0 a* T& E3 x- L* p F% y1 i3 n
try {
3 H" N" [: O' v) h modelActions.createActionTo$message5 D. p3 {7 u* L% Y, s+ d
(heat, new Selector (heat.getClass (), "stepRule", false));
& W6 x1 r, ]+ z% H5 e } catch (Exception e) {
$ g2 X/ T. [, s7 t: v [* ` System.err.println ("Exception stepRule: " + e.getMessage ());) O5 u7 L6 v/ F
}
6 g2 Z6 b8 v/ X/ {2 r
. R5 l! {1 _/ C- g2 G1 f try {
" n5 w3 a- _% L9 e/ K3 J- _ Heatbug proto = (Heatbug) heatbugList.get (0);
# s! M7 p2 \& m1 h! Y# C8 u1 { Selector sel = ; E: P( i& p5 W1 s% D( C3 F
new Selector (proto.getClass (), "heatbugStep", false);
0 u5 J8 I! v% b actionForEach =
5 d- o9 H0 N1 U3 y; z- ~" q( ?/ a modelActions.createFActionForEachHomogeneous$call
& \% A% z# J2 b (heatbugList,( k6 c( `, n" |# Z8 P" G2 [
new FCallImpl (this, proto, sel,
0 Q1 Y; K+ D, R3 t new FArgumentsImpl (this, sel)));
7 n# S/ T9 }! a' b } catch (Exception e) {
4 B+ q. m% t1 ~* Z+ H e.printStackTrace (System.err);! T: Y5 _0 m- Y* D: G) o
}9 U. w- [6 V( E
+ g0 n" E" b3 m6 {7 l9 O; L, R syncUpdateOrder ();% Q, L) K: v' h4 ~0 R2 R* D* H
0 c j% `. y$ K7 k6 h
try {8 }: R' W8 h3 O
modelActions.createActionTo$message
* Z- A2 b' z$ s% f {) D (heat, new Selector (heat.getClass (), "updateLattice", false));
" j+ H0 w+ L$ V } catch (Exception e) {: H' \( q1 p8 P6 e
System.err.println("Exception updateLattice: " + e.getMessage ());
T( i( i4 U( R! V }
9 v' M$ L+ Y! Z8 ~ 6 G, \* `: E# h/ O Y9 f! d
// Then we create a schedule that executes the# x" j; s. b0 Y, C) i" Z3 k n
// modelActions. modelActions is an ActionGroup, by itself it' T( H7 F( ]& j1 [& t1 {8 I, I
// has no notion of time. In order to have it executed in
4 Y; ^7 a' L- }& z // time, we create a Schedule that says to use the a7 s: a* Q% a: I
// modelActions ActionGroup at particular times. This
- L* ]5 N+ ^$ t // schedule has a repeat interval of 1, it will loop every
& M0 E( k4 ~3 z1 Z6 p3 F // time step. The action is executed at time 0 relative to
. t9 M: c q4 e // the beginning of the loop.
9 h4 R! K! O7 i& Q7 ]; Q7 C; {/ O# d1 |
// This is a simple schedule, with only one action that is
; r5 M7 N# h! x$ Y& E" R { h) n1 T // just repeated every time. See jmousetrap for more, y: }. H' Z$ A; q- d% j
// complicated schedules.
- B' K' }$ a6 W! g1 P: v9 O
( d1 P6 @6 J+ h: X; r; | s modelSchedule = new ScheduleImpl (getZone (), 1);9 ~& x$ W! r$ M5 ~' a U" l
modelSchedule.at$createAction (0, modelActions);
: X5 [! b* t4 ~3 l/ N* Y
R! m# l; }' A0 ^- x- t' V return this;
" f! s$ H* _5 w7 ] } |