HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- A( C1 e8 v9 W" I
, C7 m* Q* j- p# X% H- R public Object buildActions () {
8 Y- f$ R5 c# o/ p7 ~% J super.buildActions();) W: V5 Q* u: O8 {4 r
" \1 s% x9 q- ?3 M8 ~
// Create the list of simulation actions. We put these in/ c: u" B6 x( m, o8 z: G
// an action group, because we want these actions to be
- i2 T X6 |) q // executed in a specific order, but these steps should
- S* N# n" S" q" X/ |/ l' F7 U // take no (simulated) time. The M(foo) means "The message
% c. U p. `; Q$ I+ V: r& r // called <foo>". You can send a message To a particular
& j8 ~$ f: ~& n: L3 c0 G // object, or ForEach object in a collection.
" C9 U3 H4 ]/ C6 t8 y _4 v4 H3 Z; o ! a1 t5 h7 f6 d+ _" X" ^
// Note we update the heatspace in two phases: first run, }6 K. m3 A1 J
// diffusion, then run "updateWorld" to actually enact the. C) N- H1 F R/ J9 m
// changes the heatbugs have made. The ordering here is! g8 y0 z9 V; h |
// significant!
6 ~5 O4 M Q* W+ a; s7 G7 \
/ i2 h8 E8 M+ ?4 m // Note also, that with the additional& s* ~, ^+ ` j; \2 O, c2 S
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 ~- d/ h/ w, n2 u
// randomize the order in which the bugs actually run
6 ]9 X: f( \/ @; t* } // their step rule. This has the effect of removing any
' M' w# t3 k8 u. |+ E: X' M // systematic bias in the iteration throught the heatbug
) r' {+ i, P! X) F M# J% o% | // list from timestep to timestep
3 c0 z3 J4 |' v: k
5 T: Y: [6 @' ]+ q& L // By default, all `createActionForEach' modelActions have' _) ]3 D4 C& n i" Z5 L, U& U
// a default order of `Sequential', which means that the
" t% F ?* z! z$ I // order of iteration through the `heatbugList' will be
* X4 z9 _$ k8 J2 ~/ O! @8 r# @ // identical (assuming the list order is not changed
, k0 x% p: b$ z9 q; [ // indirectly by some other process).4 X3 b4 i! ?7 j* h9 k# W
@7 J& g! z2 y! Y$ b$ l modelActions = new ActionGroupImpl (getZone ());
2 \: D& k2 Q) }
- O! \) c) |0 h% M$ V try {
7 w* }( M/ |2 T V; A% p) x modelActions.createActionTo$message
! S$ u/ u" \4 }6 H& f (heat, new Selector (heat.getClass (), "stepRule", false));* Y" A. a6 V- P; q9 r7 ]
} catch (Exception e) {
: e5 Z6 \7 }/ `9 O- i2 h8 m( L8 ^ System.err.println ("Exception stepRule: " + e.getMessage ());. p% x6 D8 ~! L$ O! G+ {0 r" ~
}
; j" c) o6 c! D. E- H- F) x& J6 @- }6 ]7 z# J* h6 W+ J* E+ n( N
try {
/ n5 u1 e; y; S' U- H4 ] w- P0 J Heatbug proto = (Heatbug) heatbugList.get (0);
" t& z0 a/ y* ` Selector sel =
! f7 f9 h) _+ v; c/ `4 x new Selector (proto.getClass (), "heatbugStep", false);
$ Y% z- i2 j2 W% y; \ j actionForEach =# `8 n! d6 Y: |$ v1 E' @. j
modelActions.createFActionForEachHomogeneous$call
5 ~. X6 i% s/ ?9 k9 s# U7 B# N (heatbugList,/ t; a4 J5 p' C
new FCallImpl (this, proto, sel,; x8 @# x( D% q1 S9 w8 I/ _, J
new FArgumentsImpl (this, sel)));" H) Y" Q: o7 X- Z9 ]% L* R- y4 y
} catch (Exception e) {! j* t6 G% J" x. u* q1 v. @6 U
e.printStackTrace (System.err);
0 _0 h, v" {% j$ q }
4 |' i+ c+ Q7 J. X$ Z0 s6 h k* e/ C, h6 l$ o
syncUpdateOrder ();
, i1 Q) ^& i! b$ [3 O2 e4 f5 s. b6 _
try {
+ j1 w' q: w! r5 D# x modelActions.createActionTo$message
4 f/ \% a7 P$ Z R! m (heat, new Selector (heat.getClass (), "updateLattice", false));& k/ G( A; T* ]. G. }
} catch (Exception e) {
$ Y, H& U& j% J" c( \ System.err.println("Exception updateLattice: " + e.getMessage ());/ e, {2 \) K& r+ ?
}( `$ q( ^' H+ N
. O! L+ Y# g4 V
// Then we create a schedule that executes the
# o3 s) y7 l/ ]. \ // modelActions. modelActions is an ActionGroup, by itself it2 J3 R* M6 L+ n6 A5 e5 G0 @" A
// has no notion of time. In order to have it executed in
& w0 B9 Z' J: z6 \' f- Y4 y+ z // time, we create a Schedule that says to use the
. t0 ?+ i3 `3 B1 _" P // modelActions ActionGroup at particular times. This( _, y1 t) v( h* M3 v
// schedule has a repeat interval of 1, it will loop every+ ]! u7 h5 K' G" P
// time step. The action is executed at time 0 relative to3 ^5 P( E! ?* V6 f/ o! z
// the beginning of the loop.
: P& o, ?/ j8 l: t$ X0 q' j: _
/ Q! h) i9 k0 K& `' p6 b" _+ @ // This is a simple schedule, with only one action that is
7 _6 s L+ P, y4 s) y* N // just repeated every time. See jmousetrap for more
& R8 i* q4 ?0 Y$ u6 C2 w" O // complicated schedules.) p, w0 l; |, @; \
! ~( b$ B) O6 ~) c modelSchedule = new ScheduleImpl (getZone (), 1);2 ~ n) |. ~: P* s
modelSchedule.at$createAction (0, modelActions);
, ]$ j7 o9 h8 G0 |" _
1 P+ M" a; J6 u" l6 Q: V g8 C f return this;- Y1 s! u" t j$ X, X2 `
} |