HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 ]/ z+ ~5 I" |3 G! q2 b" k$ Q* u5 s
public Object buildActions () {
1 q [: A7 w6 B, q# v super.buildActions();/ x5 I! j; w+ g K4 i& p2 f ^( k
5 o1 k& z0 u T G- ?1 x
// Create the list of simulation actions. We put these in
. l( B! I$ @6 }4 e // an action group, because we want these actions to be
8 b8 h% n. |- d7 b2 d+ B$ S1 r1 {0 j+ I+ R // executed in a specific order, but these steps should
1 j- E* Y0 @# c8 c# s // take no (simulated) time. The M(foo) means "The message+ d: r' \. r2 K$ L4 \/ q! J' F! x
// called <foo>". You can send a message To a particular
; v. p5 o& ~1 c0 z2 w0 C% K // object, or ForEach object in a collection.
! U! U$ M R Q1 d" h& T0 S( Q0 [ 7 H4 H3 j4 M7 g. d8 s$ R
// Note we update the heatspace in two phases: first run
$ q' i* C; p8 E7 u5 W // diffusion, then run "updateWorld" to actually enact the
M3 u7 f P% e6 s G5 u1 E // changes the heatbugs have made. The ordering here is
H% D, u, ]& X // significant!/ t; ^7 ]* C& k2 v( J7 n
+ O# x5 w; V- l) ^- y* f
// Note also, that with the additional
! p$ M2 `3 s( ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can3 I/ j' X/ v4 A
// randomize the order in which the bugs actually run
3 ]% K: p- L& P& B' n* B // their step rule. This has the effect of removing any
, Q: w. |1 [9 \+ U1 T // systematic bias in the iteration throught the heatbug
4 F" q5 ?9 m# n0 u W" v // list from timestep to timestep" \/ b$ |0 n7 }3 l F6 F* B
" x v* Y& o" o) p; g& s // By default, all `createActionForEach' modelActions have1 `' N) F7 Z ], }8 k3 t
// a default order of `Sequential', which means that the
, i% b8 V3 H: O* z, I0 R // order of iteration through the `heatbugList' will be5 Q: }0 j/ ^3 Y
// identical (assuming the list order is not changed# m1 S0 ~1 Y8 R& X: E+ V+ `+ u
// indirectly by some other process).
N+ l: J% Y' q8 t3 L& o
# [" E$ `. }# b9 o5 f% ]! ~6 M modelActions = new ActionGroupImpl (getZone ());
7 b8 F; z9 D4 t1 [' r" R3 ]1 d- g' c$ L" e1 T5 W. V+ ?
try {9 S# R" x! O- {5 n8 U+ b
modelActions.createActionTo$message
% W' L; }, W# s, l7 }$ V+ \ (heat, new Selector (heat.getClass (), "stepRule", false));
( W, G+ Y$ f0 f+ c) I2 L ]- P, Z7 e } catch (Exception e) {! B+ `% m& O2 L5 Q8 E
System.err.println ("Exception stepRule: " + e.getMessage ());1 ~ e& ]0 a, q' \3 N1 x, e; }
}
9 q5 S# u' M9 ~$ H4 S G( s( j; w2 x7 P, F4 j" e
try {
7 N! M9 O9 v9 _$ s( _5 T7 q Heatbug proto = (Heatbug) heatbugList.get (0);1 k% f& F! }* C7 S* R% V3 _
Selector sel =
3 K8 y: k! z% i new Selector (proto.getClass (), "heatbugStep", false);: Z# Y- S; o9 ?% {/ V" T
actionForEach =
. H" }% b' s9 ^$ l4 P- C. t modelActions.createFActionForEachHomogeneous$call
" C( Z& v& i: c. ~- h$ D (heatbugList,7 I- U, D8 t. n
new FCallImpl (this, proto, sel,
- H7 g1 Q; U) P$ r& g# j' ~! y new FArgumentsImpl (this, sel)));
0 |, C; E% H# e$ a" P8 K } catch (Exception e) {
6 P3 X( o$ Q6 C& d) z @ e.printStackTrace (System.err);
0 U# V: N1 m. r6 ? }
2 V) V4 {+ V( o
+ m$ d: P* n! D. d! S) d syncUpdateOrder ();
! @7 y' y0 Q1 r& W3 O4 o: ^$ I. v
L: _% X$ L0 _' f! H$ q try {3 C3 X3 |$ f" [8 ~& P. I/ T' {
modelActions.createActionTo$message
. u: Z& i6 a1 {7 N7 ?5 n2 { (heat, new Selector (heat.getClass (), "updateLattice", false));
" A9 j4 ^7 M/ k( |; q8 n } catch (Exception e) {2 V, Q2 i5 o' E' m$ ~3 S$ S
System.err.println("Exception updateLattice: " + e.getMessage ());: |5 E- @9 \3 b; d9 c
}3 i& U- V8 P3 c; ~, g; ^3 w
% l5 E$ [$ }, Q# h3 a4 i
// Then we create a schedule that executes the; F9 c$ `/ d6 N9 F) }
// modelActions. modelActions is an ActionGroup, by itself it
4 Q- H$ [& k. C" M& H // has no notion of time. In order to have it executed in
" ]" L5 H5 F1 }& Z // time, we create a Schedule that says to use the
! V' g% g a! } // modelActions ActionGroup at particular times. This, M7 h: p/ d5 e. B
// schedule has a repeat interval of 1, it will loop every+ S' V, x3 ^, H' d1 A
// time step. The action is executed at time 0 relative to
A4 m9 g) f, W( M* x' o6 ] // the beginning of the loop.7 }. N" `- ?. `0 M# C6 M' K
: N% _4 q. k' p9 q/ _
// This is a simple schedule, with only one action that is( U9 b0 R* o; i5 K# `' l
// just repeated every time. See jmousetrap for more8 S* q- b1 e+ J3 i5 L& k* m
// complicated schedules.
. B. a/ e2 g5 W6 m4 O& k 3 z. F* t. ]1 M9 ]: o8 h
modelSchedule = new ScheduleImpl (getZone (), 1);
' s& \- s q, B modelSchedule.at$createAction (0, modelActions);
) L% ] n3 i: F( Z* X' \ 9 ?7 ?! Z `9 N" N
return this;
9 B! L% R: p9 k* I( k9 e9 B } |