HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% i- J4 t) w, g& R7 p0 I2 m6 v6 n. L$ W( \
public Object buildActions () {
; z& p2 p$ r& E/ q% v% S/ D1 o super.buildActions();
8 K) }8 c0 ^- F/ r + v6 f- b" f* T
// Create the list of simulation actions. We put these in5 t6 N1 a3 A7 R- e/ w, }9 e' u+ t
// an action group, because we want these actions to be; ^) I+ p9 O# X4 r$ Y: Z
// executed in a specific order, but these steps should
) j+ Q" j% o5 F" `! H% o4 o+ Z // take no (simulated) time. The M(foo) means "The message
* A# ?/ {6 U/ S# X5 A$ N // called <foo>". You can send a message To a particular# X0 q6 Q2 ?2 M9 r
// object, or ForEach object in a collection.2 S# Y" a( v* T
6 M2 x. n$ _8 m! J$ l // Note we update the heatspace in two phases: first run$ c$ |- G% ?4 |0 F* c" i7 L
// diffusion, then run "updateWorld" to actually enact the
/ q/ r+ r& I7 s5 K2 u6 T // changes the heatbugs have made. The ordering here is
! v0 S( Y& n* Z# H // significant!
8 S; O7 x8 S& L" {. r Q 6 @9 O, Q, @, U+ K
// Note also, that with the additional3 y" r4 {. u- O
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 P; k4 k% {3 M% |' M. v
// randomize the order in which the bugs actually run# l, S) R' \6 B m
// their step rule. This has the effect of removing any
$ a3 L, ~& H0 d# b0 D2 G3 |/ X& A7 `, v // systematic bias in the iteration throught the heatbug, h: A6 \0 I8 ?2 o6 v
// list from timestep to timestep
: A# G! g( j3 y
& l& `* l$ J# b2 v // By default, all `createActionForEach' modelActions have
1 x8 J, W6 I1 T6 v* B9 S) @. [' ~ // a default order of `Sequential', which means that the
. {6 c' _. b. x/ s // order of iteration through the `heatbugList' will be
! y! t# F O4 T3 ?) I! U& l // identical (assuming the list order is not changed& B! b4 O$ F, x% K% f: U
// indirectly by some other process).6 E+ B5 o% J) c, G: u2 r. w
6 N9 B/ T; t/ y0 b modelActions = new ActionGroupImpl (getZone ());
7 v3 N4 Q2 B. g7 h
9 P- U. d% y9 ]. B/ l% \ try {
' f4 G! l+ n& L' ?1 @ modelActions.createActionTo$message5 i% L4 a6 [* H0 n2 L% W J4 S
(heat, new Selector (heat.getClass (), "stepRule", false));
5 z3 f" C B* e. l4 q) ^ } catch (Exception e) {# U& g5 g( O- k
System.err.println ("Exception stepRule: " + e.getMessage ());
5 D6 C# D. g7 O. W$ @& I* B }0 j: f- `9 l! s+ E4 M8 D
F# o5 k% J7 y3 ?
try {
7 m2 l, B2 n" P Heatbug proto = (Heatbug) heatbugList.get (0);% u- ~3 B( U8 s4 k8 J. J
Selector sel =
9 {9 q; h7 R$ v3 i# w new Selector (proto.getClass (), "heatbugStep", false);
; e( I+ h1 ^4 e: \, ^ actionForEach =/ T7 P. S" S; j6 U1 V
modelActions.createFActionForEachHomogeneous$call# E X& g9 z5 q) e
(heatbugList,
- S5 C7 s0 `+ a5 G1 x new FCallImpl (this, proto, sel," l1 {" p4 H! C
new FArgumentsImpl (this, sel)));
/ s& r& N1 x( Q C } catch (Exception e) {* q# p- y* H9 w4 P, K
e.printStackTrace (System.err);( O$ |' @, ^- _: K$ X% c
}
; E1 C8 ^) S( d! f+ O5 Q I% ~5 R. c 0 f5 G6 n# |' j3 }# {1 P: v
syncUpdateOrder ();
; |% d7 u C( P# B: i: E2 Z7 N7 l7 g" [8 Z( `9 R1 {. n! b7 }
try {
0 i2 x& Y0 p( O" _% @; X5 { modelActions.createActionTo$message $ z7 p2 w0 l) s
(heat, new Selector (heat.getClass (), "updateLattice", false));- E& i8 @4 l) O7 b0 F7 W8 _
} catch (Exception e) {
5 l: l+ t+ d. }3 q i9 t System.err.println("Exception updateLattice: " + e.getMessage ());
) C2 R3 g9 a4 I% f! w) ? }. W. k" V1 y8 R) j2 G1 H) E
# `7 ^/ |4 @& ~% w2 H4 R5 K // Then we create a schedule that executes the
7 p, x9 g: r7 e2 y! N // modelActions. modelActions is an ActionGroup, by itself it) ^9 _, u1 ?- J4 k* j5 O
// has no notion of time. In order to have it executed in# l8 r1 y# V' {0 P8 A
// time, we create a Schedule that says to use the
; l! F& B% a/ z // modelActions ActionGroup at particular times. This3 T; P& E1 b2 ^! o
// schedule has a repeat interval of 1, it will loop every
" n6 M7 V/ t% y* S. G, x% Q) H // time step. The action is executed at time 0 relative to
3 D z. S- i! W* n) e( q$ q // the beginning of the loop.; ]- v6 {' |, M9 }6 ?
6 ^4 ?2 c9 T. T9 i // This is a simple schedule, with only one action that is
! `- ]) E \1 Z7 M // just repeated every time. See jmousetrap for more2 I T, d3 a0 z/ s [9 w# I
// complicated schedules.1 ~) f# ]* l. O9 c# \- S5 @
6 _( h7 ~7 f, F( S4 X* n' `5 n modelSchedule = new ScheduleImpl (getZone (), 1);" I$ d H4 y6 X+ L5 p, o* z7 A7 a
modelSchedule.at$createAction (0, modelActions);. S8 t9 i( F B& r
2 O/ t, p( ?& ~5 q
return this;
: U G3 U7 \2 W; o0 a6 |* ^( \; B } |