HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" _, K2 E; x* x$ J! k: ?2 v/ _0 a6 R* q
public Object buildActions () {
l- d) t* L+ T super.buildActions();# c6 n. r; d' T6 D$ u
- K2 B2 h# z& B j8 X
// Create the list of simulation actions. We put these in# d- T/ d1 `1 ? q4 j
// an action group, because we want these actions to be
! _) ~2 i: t! \9 T2 @: d // executed in a specific order, but these steps should% x' J' x$ _. _# w% u% D0 n4 P
// take no (simulated) time. The M(foo) means "The message
) Q7 I5 I* m( ~ // called <foo>". You can send a message To a particular5 M! ~/ s" c4 x, O0 }% ~. _
// object, or ForEach object in a collection.4 c; x0 K) c- i7 R
9 ?- f- z, z- Q$ }$ n
// Note we update the heatspace in two phases: first run6 Q, ], F" z% D, P! ~4 m- i# p" X
// diffusion, then run "updateWorld" to actually enact the
2 G {3 o7 Y, S8 T' R8 H // changes the heatbugs have made. The ordering here is
! o/ w/ R4 W& j U! Z8 U // significant!
& _2 d) u5 k/ N# @+ V! S7 W
5 U) k* `6 ~7 M* D# Q8 D" O // Note also, that with the additional( r( o% T: R$ y, y v3 O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' _9 t) p/ U' A( H* Y // randomize the order in which the bugs actually run
7 C- C E: T* Q4 o5 r; e5 m // their step rule. This has the effect of removing any
/ e: A0 Q* r' z" } Z/ X5 F // systematic bias in the iteration throught the heatbug
; q3 P$ ~% a1 E5 R. x" D% z // list from timestep to timestep
8 {, e4 R/ O" ~2 c3 e ; L0 J+ c. z n! z! f
// By default, all `createActionForEach' modelActions have! f5 [5 B3 f6 Z# A! e- R
// a default order of `Sequential', which means that the
- l/ g+ V) o* w% }( @+ E // order of iteration through the `heatbugList' will be
* Z& j' L* w/ z/ i" z // identical (assuming the list order is not changed1 j8 Y6 z' z* [1 G. z& A
// indirectly by some other process).) m% _+ a! }9 D7 O- `
& ?" y1 h/ K4 G( A0 N
modelActions = new ActionGroupImpl (getZone ());: j8 o0 U M* t9 c9 ?1 W1 ]
6 t# b' w Z7 l$ I try {9 A9 }# N3 I/ D9 Y: F9 [
modelActions.createActionTo$message
+ h7 v- V& ?; R7 c6 g5 @/ }+ X: p (heat, new Selector (heat.getClass (), "stepRule", false));
u# f# P& _* {2 D S3 o6 P: p' Y+ w d } catch (Exception e) {
3 R F _( V! Y; t) m System.err.println ("Exception stepRule: " + e.getMessage ());/ i0 b2 ~8 Y% c# T7 p1 s" z, L
}. t' T, F% g k
* U# ?" i& }, k9 g
try {3 o& I0 l1 @ D; ` M% `! f, k
Heatbug proto = (Heatbug) heatbugList.get (0);( K# k/ U0 G: E1 h
Selector sel =
% Q& |- f, E; u* B6 e. C& S( [ new Selector (proto.getClass (), "heatbugStep", false);
& _6 J1 G4 T+ A' R# A+ N6 k actionForEach =5 s# {, F& w1 B6 v- }. v
modelActions.createFActionForEachHomogeneous$call
6 E1 E% u' Z2 o (heatbugList,; \+ y- D, G2 s9 @) e
new FCallImpl (this, proto, sel,8 x4 F- y- F% j: `. C9 O; e
new FArgumentsImpl (this, sel)));
5 y. r8 @& g( V% b* N$ q5 w } catch (Exception e) {
1 L& \/ I, m3 m S( q e.printStackTrace (System.err);( R0 G6 K6 N; i4 s& [0 A2 W, k
}
) ]: F5 v- j0 ~
" ?0 D, E4 k% z" n% x9 ? syncUpdateOrder ();
) V s1 X/ P2 u- }( b8 o [
6 C+ p1 \+ \/ t) f5 W- B try {
+ F' Z5 R6 l% [' i u9 A% a4 f modelActions.createActionTo$message % E% a b& Y+ D9 [: W
(heat, new Selector (heat.getClass (), "updateLattice", false));* S6 O& |, A3 h0 u V
} catch (Exception e) {7 z$ ~8 j0 Z5 x% ~
System.err.println("Exception updateLattice: " + e.getMessage ());$ T! s7 W6 ]6 J, B8 ]5 T
}
1 U2 A) P# q3 d |# P
D4 Q# T) U2 Q) J // Then we create a schedule that executes the0 _3 n% U8 ]2 {
// modelActions. modelActions is an ActionGroup, by itself it
, Y- t5 V! i- D* t* y$ P' l; V // has no notion of time. In order to have it executed in
2 b4 F; e! F- K C8 h1 t // time, we create a Schedule that says to use the* w' x. K' k6 C. p! L+ ]4 L
// modelActions ActionGroup at particular times. This
8 |& `# I+ H' I1 y# d; k) |5 r+ `. V // schedule has a repeat interval of 1, it will loop every
' G# Y7 ]: q$ d1 {5 q9 A3 [2 R- F // time step. The action is executed at time 0 relative to: x! A% m, F8 p) h
// the beginning of the loop.: P# K2 U$ Y$ R/ @* ]' U3 `5 [
: J/ @* p$ z6 O) }: w! j
// This is a simple schedule, with only one action that is
& w5 j9 A8 R4 S7 r# j7 e& e // just repeated every time. See jmousetrap for more
, i2 ]: s0 B$ |3 y& s // complicated schedules.
9 g2 x; |0 N+ w4 x
, v: \3 h, c8 F9 U" w, w7 J) A modelSchedule = new ScheduleImpl (getZone (), 1);
- D7 C6 y' _4 |$ ` modelSchedule.at$createAction (0, modelActions);
; _* T, ^1 I) R
. r6 K; O/ v( L9 e& {# G4 T3 v return this;( H8 m3 {3 p* i- T5 ]- C- A% O
} |