HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' d! C7 C Y4 R9 x& Y
! h7 y! b) A8 X& ]- |, g% y: H public Object buildActions () {, Z4 o' q: [7 N, c7 F p, ]
super.buildActions();
, M; ?) s3 H; m " R: W9 Y* y, E3 m9 D' F
// Create the list of simulation actions. We put these in) {6 F! D4 @4 f( W& F
// an action group, because we want these actions to be
/ ?! Q4 `" ~4 l- r, Z // executed in a specific order, but these steps should- h, v0 M! W+ V0 \5 W
// take no (simulated) time. The M(foo) means "The message) E/ q F6 F" y# }# K5 K( O
// called <foo>". You can send a message To a particular
7 h& W5 G' e7 p // object, or ForEach object in a collection.* _' P7 H* u( M
. |) T* V! M6 Y' \8 k. b // Note we update the heatspace in two phases: first run! |/ C' X" r9 y. Z# g3 R
// diffusion, then run "updateWorld" to actually enact the& T- O6 Z( ^9 a2 G) {' }
// changes the heatbugs have made. The ordering here is7 x# z% w+ U5 x% G+ ^0 F
// significant!
0 s) X! \' g+ J
! H. J4 Z8 L8 I9 o7 n3 E // Note also, that with the additional6 d: A* i! ~3 R2 K- ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. e5 S) R% q' j- D1 i3 F0 N6 J // randomize the order in which the bugs actually run& R8 B7 T. Z* a$ I# _6 ^5 _
// their step rule. This has the effect of removing any
# t" I j' {' o, O // systematic bias in the iteration throught the heatbug2 R) v8 ^/ o( {, ?9 w5 ?5 i; g
// list from timestep to timestep
& ]: S. [# C" J7 ` : ?1 T7 n. G3 x& L
// By default, all `createActionForEach' modelActions have
' J3 |) b! H4 y6 f // a default order of `Sequential', which means that the
1 {/ Z5 k, ]* j: {, W6 q4 G // order of iteration through the `heatbugList' will be
2 D6 w9 i% Q4 T2 M% D8 W // identical (assuming the list order is not changed, B1 q4 P( ?1 `3 D4 F
// indirectly by some other process).
0 i* a2 b3 J4 c
& _: W" C. {/ t1 k( ~0 F/ M0 k modelActions = new ActionGroupImpl (getZone ());; t# m9 F! p H+ U4 V
- s9 r3 p6 g0 O, B, l
try {& p& @0 U k9 r! o+ c8 ?2 n
modelActions.createActionTo$message9 g5 I+ J9 _3 p6 H" q* G/ a8 s3 U
(heat, new Selector (heat.getClass (), "stepRule", false));$ i' a2 ]( |' h7 ]8 D+ E4 v* `
} catch (Exception e) {' B# {2 A8 I1 b( d
System.err.println ("Exception stepRule: " + e.getMessage ());! E: |, M8 t. G0 q
}; M6 `( K# i: n
/ |, j$ _* h4 T try {, y* j& m5 ?: z5 U- D2 [6 ]
Heatbug proto = (Heatbug) heatbugList.get (0);( P5 l( t) i# u" |7 f
Selector sel = & N2 I8 O, [/ V9 Y
new Selector (proto.getClass (), "heatbugStep", false);
% }$ }3 I& F+ T( w/ h$ s3 } actionForEach =
. @0 O, b- d, N7 P; e" d modelActions.createFActionForEachHomogeneous$call' y& u* n# ?# l* B7 b: ^" c) I9 V
(heatbugList,1 P. I' y( x+ a2 V* [
new FCallImpl (this, proto, sel,/ U) k& i# b/ J" }/ I& N5 U
new FArgumentsImpl (this, sel)));$ ~. I# ~. h/ j% O! g
} catch (Exception e) {
* l2 i: l1 |& @& b0 U3 ^# @5 }: z e.printStackTrace (System.err);
g7 W" B: ^7 i L0 x }" w4 \) B. k& R) {
, w5 r$ P% u) A6 o syncUpdateOrder ();
+ ]. U% n+ T+ e2 r3 T8 p/ I8 T% l& O& H2 O
try {
+ u. ]2 X: h$ E modelActions.createActionTo$message
. v) v d+ f A9 U (heat, new Selector (heat.getClass (), "updateLattice", false));
. ~- h7 N2 s% p } catch (Exception e) {4 \, o4 R7 ?+ B' q z8 A
System.err.println("Exception updateLattice: " + e.getMessage ());
+ s5 T5 M4 p# t: B$ o }
4 w$ i* o% b2 W1 V) Z) z / B# k$ v+ ?7 E' r
// Then we create a schedule that executes the
$ s+ _: C* `2 [. f // modelActions. modelActions is an ActionGroup, by itself it3 M( x) X4 P) F0 e3 \
// has no notion of time. In order to have it executed in5 `: ?- e# q5 W1 A
// time, we create a Schedule that says to use the+ L5 Z0 ^) {; B' M+ V" M _
// modelActions ActionGroup at particular times. This( A! l: ^! L0 i( w: l+ D
// schedule has a repeat interval of 1, it will loop every
3 {0 A+ _7 ?! v- `; `" W) ? // time step. The action is executed at time 0 relative to/ p" `: g, t+ T# Q+ N
// the beginning of the loop.
6 q0 g/ @/ ~( H4 U& i: N1 B( |2 o
6 D5 U6 i, r4 I // This is a simple schedule, with only one action that is+ V% Z" z5 g& D1 R* H
// just repeated every time. See jmousetrap for more0 _- a; O2 V$ a+ p
// complicated schedules.
% c* n' E6 F/ G! ^" j1 ]' A2 y# C4 Q2 q
" \- K( h4 M. c3 G4 m# C modelSchedule = new ScheduleImpl (getZone (), 1);% z$ K5 W+ k: \! `4 H
modelSchedule.at$createAction (0, modelActions);
3 Q* u. t6 Z; N( g" m" A
) D4 c; x, D5 e! ~+ O return this;( u1 G- O3 k9 V* u5 X: W6 u' E( Y
} |