HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 I9 ^$ d% A/ s! C" u
; z; M3 S: f# W) C- X z2 s public Object buildActions () {7 T) a( K7 I9 p& g( u* H$ e+ f
super.buildActions();, Z0 b M3 Q/ U, h6 e% @& m
8 S- s' d Q- B' `/ Q4 [* s' Z% }- q
// Create the list of simulation actions. We put these in
6 U) A$ o6 V! m9 A% E: l5 l0 @3 J // an action group, because we want these actions to be7 v& p) r) V6 l5 B
// executed in a specific order, but these steps should+ ^4 Q7 f" W" B7 \) }6 x
// take no (simulated) time. The M(foo) means "The message
* \1 ^6 D& ?4 ^6 \) h( H# T // called <foo>". You can send a message To a particular5 C& M; C- f! S2 {
// object, or ForEach object in a collection.
" V8 ?% |1 N+ v4 e5 x# ?* } ! n7 t n: U+ E( i! O
// Note we update the heatspace in two phases: first run
9 } Q7 i8 n7 q# Z( v# O( } // diffusion, then run "updateWorld" to actually enact the3 b5 h, D" u6 {/ D8 x% @# s
// changes the heatbugs have made. The ordering here is
: X% {3 h4 `: ~: v; H# i4 d# I // significant!6 F0 {0 c0 m) _- Z9 I6 `2 ^
5 T. n% @! F: [2 S4 ?
// Note also, that with the additional1 M/ F: r* U# ~/ S. c- O* [
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& }: N* J+ k7 } // randomize the order in which the bugs actually run/ p3 M c, L" x" f; v
// their step rule. This has the effect of removing any) M$ b$ D3 _! D6 {' Z
// systematic bias in the iteration throught the heatbug& q7 ~. S! E) C" G' s
// list from timestep to timestep: Y1 z! c$ w- W3 [" y
h* G8 S! Q; u* q6 W6 Y) @ // By default, all `createActionForEach' modelActions have
( ^. B$ }! g: R4 j // a default order of `Sequential', which means that the# y9 E% @0 P( Z7 e* t
// order of iteration through the `heatbugList' will be( O- s) q( ^7 _" u
// identical (assuming the list order is not changed
& {6 w* X# b f$ L1 x // indirectly by some other process).
* {, A( q# Y& q/ ^. f8 m, Z# X
' K( m6 ?; O8 u: |6 u' I! O modelActions = new ActionGroupImpl (getZone ());+ [3 e* g) d8 M' Y
% t- @% [! m0 M/ ^) I try {6 L# k' R5 X& h* T. _
modelActions.createActionTo$message# c) I: c, T F7 W$ @
(heat, new Selector (heat.getClass (), "stepRule", false));; U: f7 e' n1 T8 ~0 a2 a
} catch (Exception e) { E3 q! T' B1 G7 f7 L0 r! y
System.err.println ("Exception stepRule: " + e.getMessage ());! G1 y# T: s9 y9 C/ O, }% [
}
1 w1 S; @" i( x6 i# S; r9 @3 X( v
; L3 A) t2 t7 O7 m try {$ o7 E* |; W) L7 g# p5 z
Heatbug proto = (Heatbug) heatbugList.get (0);. P8 `1 d" S5 q3 q
Selector sel = + u; \; ]3 }- T/ a
new Selector (proto.getClass (), "heatbugStep", false);8 i( O: J& \: y2 J4 ] W
actionForEach =0 g5 d+ b. r/ [2 Q3 B- J* o9 {( Q
modelActions.createFActionForEachHomogeneous$call
( \. ]1 Y, L3 h) Z (heatbugList,- ~& E4 s5 M$ X# v) U
new FCallImpl (this, proto, sel,
# J$ L; ^( v/ N, R( `3 [ new FArgumentsImpl (this, sel)));
. j+ {- H( [" L } catch (Exception e) {: j* V/ d- @% V9 W; N1 R+ F
e.printStackTrace (System.err);7 m6 U" }! c, q' I' q5 n( C5 H
}
4 w4 x6 U! C& `' d* k& J ! \' f+ x& [. V A3 u4 {0 ~. |
syncUpdateOrder ();- d) Z6 y+ e7 D8 l- K8 h
) J" h1 t) _1 k. x try {
1 {) Z. U8 H' {/ u3 b, z modelActions.createActionTo$message
! C v- \$ m7 O: t& x4 G (heat, new Selector (heat.getClass (), "updateLattice", false));
' x" P' a- Y: x0 h, U7 |2 { } catch (Exception e) {
4 Z( h+ d0 B$ x7 t6 Q2 S: v' Z System.err.println("Exception updateLattice: " + e.getMessage ());' j! n6 [ {: {/ j! W6 ]1 A( @' Z
}
$ i e+ A+ f/ j$ v& g& a1 s# c
z3 p; D# \* C, D$ ?2 Z2 M // Then we create a schedule that executes the6 J0 C9 l- B8 I$ h; N
// modelActions. modelActions is an ActionGroup, by itself it
% Q" m+ L4 C" X- \+ j // has no notion of time. In order to have it executed in. X9 U4 Y$ x8 ]2 M
// time, we create a Schedule that says to use the! b1 N) Z- ?7 P3 W- }
// modelActions ActionGroup at particular times. This) Q" b" C! Y& P f L
// schedule has a repeat interval of 1, it will loop every
( t2 t7 f9 i) B( b3 e // time step. The action is executed at time 0 relative to
0 [% y) l! i+ B( m& O5 H // the beginning of the loop.
' x+ T( n. L; u; b
% K7 }/ m6 B& {! D7 V // This is a simple schedule, with only one action that is3 Q2 k6 R! |) g; v0 K1 S9 k4 ?
// just repeated every time. See jmousetrap for more5 T8 P" n: v4 E) c9 @5 Q2 ~' E
// complicated schedules.9 b' P% ]' L, W6 l
* t0 [ w% J* l: H/ V
modelSchedule = new ScheduleImpl (getZone (), 1);
& E* b5 o- n$ j' J/ |; P modelSchedule.at$createAction (0, modelActions);0 A3 e! ]: w4 h1 ^
7 w: T- `! G0 a! f) _2 I- a
return this;
: x' P" @: Y/ }- H) [; y( K } |