HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 \: s8 f+ }8 \( X+ G9 }
- }0 o; f# M- s9 d public Object buildActions () {0 a* V6 Y& z" Y1 ]5 m3 G
super.buildActions();
" C: E5 a- y, U& ]4 J: T 0 w9 p9 i* ^8 ?4 P0 W# H4 V
// Create the list of simulation actions. We put these in
4 H7 ^2 |% z' U" x- @ // an action group, because we want these actions to be' [! o9 m- Y) ~4 H4 i2 a$ i
// executed in a specific order, but these steps should
1 z b M& A( L9 { // take no (simulated) time. The M(foo) means "The message
. b, r; M2 d8 { // called <foo>". You can send a message To a particular' x1 W* p, i( [$ @" U& Z: H1 W
// object, or ForEach object in a collection.
7 ~, K- F) D2 x$ o# w$ ]
& A9 w' \+ e4 @$ m+ l" [. F) Z( J6 D // Note we update the heatspace in two phases: first run
7 h; Z1 _( |) H% E: \ // diffusion, then run "updateWorld" to actually enact the
v* @. M! ?, x8 D5 G* e* { // changes the heatbugs have made. The ordering here is
6 s3 C) r* `8 h h3 b: B# F // significant!9 N" {$ q7 \ Z* H. r0 m, ?
; O; |3 {7 C. p& T) ~ // Note also, that with the additional
' q+ |% F5 ]: n+ P6 N3 F9 C8 g // `randomizeHeatbugUpdateOrder' Boolean flag we can
) Y' h% ? O, x: d3 K0 r3 H4 {3 \1 a // randomize the order in which the bugs actually run1 _- z" p& L# ^
// their step rule. This has the effect of removing any! r- B4 T6 B W+ B* K: [
// systematic bias in the iteration throught the heatbug
% |% j7 J5 c5 A, L // list from timestep to timestep
/ a' X9 l9 ]- D' G
4 E) p3 K7 S- ~' R7 ]) F' X: ?: P7 _5 n // By default, all `createActionForEach' modelActions have
$ v. ~: j# N' y/ W // a default order of `Sequential', which means that the
# m# g4 Z% ^4 S* | f% b // order of iteration through the `heatbugList' will be! [9 W3 d* I) Z/ v/ c
// identical (assuming the list order is not changed
8 Y, l* [. s9 a6 I$ y, u! O // indirectly by some other process).
! S9 L5 K0 i- Q( ^" e" Q
0 Z9 \0 J& e* v4 f" c E modelActions = new ActionGroupImpl (getZone ());
4 y. Z% b/ X4 a+ h/ L
& t" o3 {/ I7 x try {# B2 J+ Z$ U+ C6 q
modelActions.createActionTo$message
) g l1 x3 [3 b$ `: w1 j (heat, new Selector (heat.getClass (), "stepRule", false));
. r6 S' i* q @7 _; u3 }& o } catch (Exception e) {% K9 T# d7 x/ Q: L- p2 {
System.err.println ("Exception stepRule: " + e.getMessage ());
C. D6 A; Y0 s7 T H }
8 z' |/ L) s. V0 M V
' k. g) {2 _5 S. o: V3 O try {9 |* i; [" |2 c1 z- E
Heatbug proto = (Heatbug) heatbugList.get (0);- K5 x# D/ G8 r8 o
Selector sel = ' l; Q3 `3 s& @! Y: d9 r- b
new Selector (proto.getClass (), "heatbugStep", false);: J, P% E7 U- |" N% S! H3 @7 K, ^
actionForEach =
& m8 X9 V/ }' D4 T& _0 e" v modelActions.createFActionForEachHomogeneous$call
% C$ K# @+ ?! L; s! X: l (heatbugList,
8 z' L% L4 t" X new FCallImpl (this, proto, sel,/ Y+ ^% @2 b. M4 P! y- [
new FArgumentsImpl (this, sel)));
: r8 n1 z& h6 K1 M! a3 J* X! d } catch (Exception e) {9 s0 J& \6 u: j6 H! Z
e.printStackTrace (System.err);2 o, X5 Y) Z+ q- M) U7 K
}4 s0 Z% v- v$ s, J( N9 X
7 U0 V# R; {8 B) H syncUpdateOrder ();
* E6 j+ l( c+ \: R% A; ~8 {7 u" S( q; `, V. u# V
try {8 B1 @. ?0 H1 [2 ^' |: Y
modelActions.createActionTo$message
9 j" W; B* u. l% {( w1 c (heat, new Selector (heat.getClass (), "updateLattice", false));
- _5 Z7 y& K) a' u' K } catch (Exception e) {
9 X% T k% K- K o3 L3 H* G6 g0 C System.err.println("Exception updateLattice: " + e.getMessage ()); w5 @% M( l5 L( f+ M
}# ]9 I2 ?' T, l! e5 s, a4 L
4 {* x9 x1 s" P. V4 P% d- o
// Then we create a schedule that executes the5 d! ]* v" J8 L
// modelActions. modelActions is an ActionGroup, by itself it
) r; _6 r" S& _2 d4 L$ L // has no notion of time. In order to have it executed in" x3 v8 g4 [# `0 s
// time, we create a Schedule that says to use the
+ I5 z9 X' \, B# p // modelActions ActionGroup at particular times. This
( M9 F# F! s9 Y/ a // schedule has a repeat interval of 1, it will loop every; i; H0 e$ M7 I" T3 M# N1 ~1 R+ K" m
// time step. The action is executed at time 0 relative to
5 W/ l6 X* r9 m9 {' W6 Z // the beginning of the loop.* Q Y. R. J: R$ ]2 t& V# e
( N) ]+ K" B7 y$ y6 ~' m8 n: ] // This is a simple schedule, with only one action that is
& X! N& M3 }* i. x // just repeated every time. See jmousetrap for more2 I5 F \5 q% n( N. h# M
// complicated schedules.( `1 n' Z( Z) T* ?8 u2 f# G3 a
9 x P! w7 M" z) ?7 c modelSchedule = new ScheduleImpl (getZone (), 1);
, c8 b6 c/ S. S# S% i! c P modelSchedule.at$createAction (0, modelActions);
6 m5 H9 Q( ]: D" Y7 \0 E
: M& c# A2 d8 e# @) u return this;
/ r, O8 X, s: |; U' [# \2 _2 Z/ P) p } |