HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. Z8 }& I2 @0 U4 x/ ?$ m5 |4 ?
5 \: G9 B! e! r; v public Object buildActions () {
. \! @( o) I. F super.buildActions();' b5 w" c( H9 J/ u6 c% e6 j) Q. v
) b5 P! \3 g, A6 \ // Create the list of simulation actions. We put these in/ e3 W# v0 d5 j
// an action group, because we want these actions to be5 p7 b' D9 ^9 g S
// executed in a specific order, but these steps should* k& z8 A, u+ K7 @8 m5 r8 d
// take no (simulated) time. The M(foo) means "The message
" U( j- {! `: c // called <foo>". You can send a message To a particular
/ q$ c5 l6 d% O6 Y+ ?4 f) z // object, or ForEach object in a collection.
/ U- J2 n9 u, N6 R & m0 p" Y' ~ A; z& V2 K
// Note we update the heatspace in two phases: first run
3 J- ]* k5 \# n* C* `0 M // diffusion, then run "updateWorld" to actually enact the
+ ]! m6 Q$ `0 Z6 { B // changes the heatbugs have made. The ordering here is
* D% y0 c4 h# b9 h/ Y: ?* b // significant!
D5 H9 T2 L+ t$ f8 Z; M . D, \- |/ J p* Z4 _0 ?4 l6 Y
// Note also, that with the additional$ G* k; \) q( Y% S) ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 [. W0 C i) e0 p, p0 {/ I // randomize the order in which the bugs actually run
# t) C1 c, Z5 n( B. j# l0 z: e // their step rule. This has the effect of removing any) v2 x7 T3 W5 r5 c
// systematic bias in the iteration throught the heatbug
4 O `. `6 w( w+ g9 [ // list from timestep to timestep" J3 P8 `$ T) e5 y* V X2 K
$ @ T4 f* i' K* T! a
// By default, all `createActionForEach' modelActions have
; S' k) [0 Z" X6 A4 d // a default order of `Sequential', which means that the
/ s: ]( b! B: Y/ h1 n3 L5 n // order of iteration through the `heatbugList' will be
. a3 Z( v5 T" i$ t( \ // identical (assuming the list order is not changed
- ^. ~2 |7 H" F! w // indirectly by some other process).
3 g( S4 w& F/ s2 i. @
3 {* U/ D" }! N' ^: _" P modelActions = new ActionGroupImpl (getZone ());& u' }7 I; F/ }( A3 n1 X7 ]
+ U: |$ h1 W" H# U' N try {! `4 D. Z A' b# G/ a
modelActions.createActionTo$message* S0 f, G4 ~+ A5 E i. I
(heat, new Selector (heat.getClass (), "stepRule", false));
8 }8 L$ z6 `7 k; C } catch (Exception e) {
' H2 d: x$ E* W System.err.println ("Exception stepRule: " + e.getMessage ());
3 ]1 z- P% C( K" n, q3 z# r* s u" r- O }4 Y6 j9 N9 k( I7 C. g- L' i
* G4 g( h" O0 q; J
try {
. z' Q* a" ~* t" b! c! A# w; n, Z Heatbug proto = (Heatbug) heatbugList.get (0);
3 j* ~- h! P- p" I( } Selector sel = 9 ^) q1 F3 y: ]6 b2 M. l% m8 n
new Selector (proto.getClass (), "heatbugStep", false);
1 E* U8 I: N* S) t actionForEach =
1 e& ?7 i- z0 A9 j modelActions.createFActionForEachHomogeneous$call5 H8 v" Y9 J( F0 [' S2 y
(heatbugList,
+ L2 h3 p) y" E2 l2 ?- M: _ new FCallImpl (this, proto, sel,8 f: s! P. d6 @( z
new FArgumentsImpl (this, sel)));* d* G$ q6 E3 U8 O8 j
} catch (Exception e) {
# X1 `+ {! d: ?: x( _7 J e.printStackTrace (System.err);
x& R" J9 |4 p1 V+ {* N, Q. I' @9 l }
: | {/ _5 i0 A$ }8 f5 b/ d6 l+ J
& L" D q/ k/ r& X y/ ]2 k* W4 w syncUpdateOrder ();' u& Z5 u6 S" g( }4 g( \$ a
. b; j) O# b9 j# W9 U
try {
4 T9 W' s, w" F, Z modelActions.createActionTo$message
; G- N! L0 _0 R; ]- F (heat, new Selector (heat.getClass (), "updateLattice", false));1 B6 Y) l7 |' F. ^0 r3 q: N
} catch (Exception e) {: t' V8 W& c* A% U; s: c
System.err.println("Exception updateLattice: " + e.getMessage ());+ y5 D1 j- P0 d5 o+ W$ j. d3 [% Y
}
( C0 D8 ^# a& f2 g! w; a - D- P3 W9 H$ n7 j
// Then we create a schedule that executes the
, C, C M `7 Q2 {- X7 c // modelActions. modelActions is an ActionGroup, by itself it
m0 Q2 P3 F% S8 j" f // has no notion of time. In order to have it executed in
2 X; C/ N0 Y' B! Q% [6 r3 J1 L! \6 | // time, we create a Schedule that says to use the
$ Y W+ m+ {' |! U3 q // modelActions ActionGroup at particular times. This
6 z& M+ l5 b: L( m // schedule has a repeat interval of 1, it will loop every
3 B: ~5 U& x9 p4 Q; I: w // time step. The action is executed at time 0 relative to* f6 ~2 V3 A& b7 C1 F; t9 N
// the beginning of the loop.4 C; @5 P) h" D: V0 R7 O* ]( C) U
, |: t# G. ]1 l# g, h // This is a simple schedule, with only one action that is6 T$ k5 _: E9 E
// just repeated every time. See jmousetrap for more
# ^8 H8 `# ^& R3 @ // complicated schedules.
! H+ e# G i7 d4 \
$ U3 u+ V0 i! E9 c" n modelSchedule = new ScheduleImpl (getZone (), 1);- {3 F0 R3 M7 B+ G, S3 p
modelSchedule.at$createAction (0, modelActions);& y' d9 x" ^; K. P2 C* g" V/ V: Z
! j% l3 F K/ j return this;
+ p+ w) H8 A- k8 L: F+ A, T, Z } |