HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 O# A9 z. A; O7 f3 k! |. R# @" R. E7 o$ L: W2 O n1 O) [
public Object buildActions () {( Y0 t! D$ C" P
super.buildActions();
8 O* j, ~7 O0 |5 \! i5 k: T
# l. `. i8 v) W9 v5 ?" I // Create the list of simulation actions. We put these in# Y( M, H+ U4 @8 k) y2 R) V
// an action group, because we want these actions to be
! C$ ~' w4 Q) ]" e" H% D1 s+ t // executed in a specific order, but these steps should
2 j7 p$ Z2 `7 j' O% p5 w // take no (simulated) time. The M(foo) means "The message
/ W$ o8 m0 K7 k0 }& z" C // called <foo>". You can send a message To a particular* q8 I2 ]2 y% t: M0 u- H/ B
// object, or ForEach object in a collection.- n1 @5 n5 o, b
2 X5 e& K5 I# b4 W3 c3 }
// Note we update the heatspace in two phases: first run
& H3 Q3 y3 v- s; \& l // diffusion, then run "updateWorld" to actually enact the2 t* @3 q) O4 _
// changes the heatbugs have made. The ordering here is1 x% P" t$ y( |) l+ h) V4 P1 w& U
// significant!! Q1 i* u3 ~* {
* N. n& w- J8 R' ^ // Note also, that with the additional0 u0 o7 }, {7 X/ A- w) S/ I5 q5 e E
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# o/ i( l& F% I) X# y: H // randomize the order in which the bugs actually run
1 |/ B5 r* s5 h4 z) n // their step rule. This has the effect of removing any
5 f: m0 F" `$ m6 @- k7 s6 D* Q // systematic bias in the iteration throught the heatbug+ [) q C! [ n+ f( B _9 @
// list from timestep to timestep
7 \$ N- C5 E# W* ^+ m. \& o4 ]9 g
; S. m6 D, T; Z9 p. P' P, } // By default, all `createActionForEach' modelActions have
7 t( S3 s t1 @+ p7 S9 B // a default order of `Sequential', which means that the
5 m3 a% _+ g9 B // order of iteration through the `heatbugList' will be
+ |1 w) ~1 g/ B6 v7 }7 A // identical (assuming the list order is not changed" v9 ]8 V$ \) K4 w3 F* M# L3 ^, g
// indirectly by some other process).* {5 X" v+ h+ q' E8 a8 V. G& ]
z1 R* I; e0 U- o1 |( g j modelActions = new ActionGroupImpl (getZone ());7 L6 l' T" |+ i9 v2 k
; `: @% P K2 I: `$ n try {
" c% [# v" l/ E8 H modelActions.createActionTo$message
9 A: C, _* c i: ] (heat, new Selector (heat.getClass (), "stepRule", false));2 {6 v+ }1 d# N" V% K5 J
} catch (Exception e) {6 [8 n, v0 K' O- G
System.err.println ("Exception stepRule: " + e.getMessage ());
" [" W" @5 `1 h2 Z' K) }6 T }8 o; H$ o( `5 p: X* e
2 N% X. M+ p4 P- I' @: U+ C- ~ try { O2 i3 y& {2 ]
Heatbug proto = (Heatbug) heatbugList.get (0);
6 {0 j* [8 E4 e6 Z0 @ Selector sel =
: h) E7 A0 ?4 o' N# z: [' b5 @ new Selector (proto.getClass (), "heatbugStep", false);. _& k+ L) e! }) v q& E& Y: @( h. U
actionForEach =
3 l3 {$ n, V6 c: S modelActions.createFActionForEachHomogeneous$call
, U" K v. {! G, k2 f' w (heatbugList,- ?! H( w/ }: x9 s! k4 Q
new FCallImpl (this, proto, sel,
6 _$ T( l" @/ N; S9 R( h new FArgumentsImpl (this, sel)));
6 d, _- P4 l+ |6 c ~- _+ b } catch (Exception e) {
* N$ A7 s0 ~5 a- ~+ }" x e.printStackTrace (System.err);2 {% V8 W% E% A0 k& u" K5 V
}$ E2 h2 w/ d" l7 X8 o! ?7 ~9 `7 S; i
" o$ t# v3 G* u. q+ x syncUpdateOrder ();! n* O/ r# S7 j
4 y; k9 q& H- T M* q4 l4 o: T7 w try {" O+ @5 K; y9 f2 Y8 {1 S
modelActions.createActionTo$message 7 I9 N+ u; a ^, Y$ ?
(heat, new Selector (heat.getClass (), "updateLattice", false));
. E2 K/ u2 ?- y) T0 r2 f } catch (Exception e) {2 }% }8 K* ^# r+ D" A
System.err.println("Exception updateLattice: " + e.getMessage ());2 h) h6 \; k* p9 E4 m
}: i3 y' n* z# q ~0 U
& @. ]- R0 y2 W9 v4 O* L! _
// Then we create a schedule that executes the. f, e9 J h" w9 B" E1 J @( k K/ I
// modelActions. modelActions is an ActionGroup, by itself it
! B7 z" W! C6 {" Y0 Y/ S // has no notion of time. In order to have it executed in: b; ]$ I# s0 L7 f
// time, we create a Schedule that says to use the
. Y1 h$ p; P8 C& e // modelActions ActionGroup at particular times. This
w9 K8 p! m& n* P+ x& S // schedule has a repeat interval of 1, it will loop every) T' D9 X3 u+ `1 O1 f9 G0 g9 W
// time step. The action is executed at time 0 relative to! F/ O( B7 W8 d
// the beginning of the loop.; [& j) ^0 e) q8 _( ~
8 N" W3 F9 m \7 Q# f; e) M // This is a simple schedule, with only one action that is
6 O0 F% B/ L* [ // just repeated every time. See jmousetrap for more
- k# A. }' f5 r- A // complicated schedules.8 n: H! D( R+ }3 d% `, N
) V# E* A8 m6 X5 L
modelSchedule = new ScheduleImpl (getZone (), 1);
7 h, i) A- y1 j7 B* t1 T* M modelSchedule.at$createAction (0, modelActions);
! x8 q5 [& t4 @5 E/ ?, W% ~1 X% g5 Y: b
$ Q: s9 b8 T; E% L6 U return this;0 Q- a n: }, X
} |