HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ z& A! _. [2 ^* c- Z$ M+ b: z& L' n/ r. ]3 @
public Object buildActions () {
\4 c$ |/ d! e9 v$ W- K super.buildActions();
6 p# Y0 l) y/ d4 |5 ~
1 d1 E: f0 @# V$ |% F // Create the list of simulation actions. We put these in
+ T% u3 @- f! J1 m! r // an action group, because we want these actions to be
7 B+ {9 L; c# ^* t2 W // executed in a specific order, but these steps should
: |! S7 @/ z% T; {7 i // take no (simulated) time. The M(foo) means "The message9 p! D# o3 H0 ^# \2 x
// called <foo>". You can send a message To a particular0 m8 H4 Q3 _; g5 ?8 ~! T
// object, or ForEach object in a collection.
$ n Q9 C a8 \9 p1 O- ?% F6 H) t " S4 M4 E4 u% J8 L7 o
// Note we update the heatspace in two phases: first run
* b* Q; D+ e$ V1 B$ k. N( | // diffusion, then run "updateWorld" to actually enact the
9 f1 G G1 d, \+ \) Z // changes the heatbugs have made. The ordering here is- `7 V: E6 o% _1 i8 Q+ e$ H( g
// significant!. ^# M& A: M* [
; K% H% M% B8 i/ g4 w // Note also, that with the additional
% Q* X. b+ r [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
! C' T% T' c1 {# g1 \6 v& B // randomize the order in which the bugs actually run. O' U4 ^' s3 c5 T
// their step rule. This has the effect of removing any
1 c6 ~; e: n, p! l. r) B+ x // systematic bias in the iteration throught the heatbug- P( V9 B$ C. c
// list from timestep to timestep
: }7 n! h/ x/ a7 C" y9 |
% c0 G! Q: n, h1 N l // By default, all `createActionForEach' modelActions have
2 Q$ K1 b+ T% p( O: L* s // a default order of `Sequential', which means that the
7 h4 A& Z; ?$ ?! M // order of iteration through the `heatbugList' will be
, \; R g' m Y8 D) \ // identical (assuming the list order is not changed! R* @; K3 Y2 g$ h) C
// indirectly by some other process).% t8 D. L. t# z7 K6 g# D
2 C8 g: ^' a) X$ C: Z- B
modelActions = new ActionGroupImpl (getZone ());
3 N$ E, N1 d/ H3 Y# ]9 |" X) d6 \9 J5 `3 c2 Q
try {
4 J9 q4 N- F; |- h modelActions.createActionTo$message
3 X5 w4 P4 x* k& H (heat, new Selector (heat.getClass (), "stepRule", false));( v6 d( R- I5 E% F
} catch (Exception e) {) t+ y% t& w* G( ^
System.err.println ("Exception stepRule: " + e.getMessage ());
" W) O5 i9 A7 ~/ N3 j* S% F* f- [ }# Q H( o& n; J* p- ]) W
7 Q4 D- ~1 Y% ^4 n" x try {
' e) J/ y; @- ~& | Heatbug proto = (Heatbug) heatbugList.get (0);% u6 g9 l2 a' {% ^
Selector sel = 6 Q' ^+ l) L9 |: o
new Selector (proto.getClass (), "heatbugStep", false);% w, Y _' q- T
actionForEach =* n$ R5 s: ~& p/ M; [
modelActions.createFActionForEachHomogeneous$call
1 n5 X' d4 Z* E5 { (heatbugList,3 L/ |7 m& p I) Q1 S" Y5 a" \7 f
new FCallImpl (this, proto, sel," Z2 p( U9 i7 p1 Z% ?- e
new FArgumentsImpl (this, sel)));; X/ _2 N& o5 I7 R- s6 l# f7 T' o
} catch (Exception e) {
) b# Y, ~# j1 ^% X$ S N9 q' ? e.printStackTrace (System.err);9 N, f) U3 Z8 }6 o9 N+ ]0 K& T
}
" O/ L) K5 D. ?( W7 ^* N/ F: j
( S" U( l2 Z+ `, U, {# l, Z; c! r$ ] syncUpdateOrder ();) B# j: ~5 M0 i
* Y; M' `% X' Y: ~+ e: t
try {
6 C1 M3 ], v) G, u* @/ i6 w modelActions.createActionTo$message / q; [+ E! ]; U
(heat, new Selector (heat.getClass (), "updateLattice", false));0 |3 s4 u4 G, i% n
} catch (Exception e) {
4 D6 f1 q U& ?; p) g System.err.println("Exception updateLattice: " + e.getMessage ());
% o% c) b3 c& k' W* H }
2 Z& N3 M/ E0 a ^/ _4 n+ u 4 O; x% t# W5 o. O% b- F7 {
// Then we create a schedule that executes the
) e/ S/ f) {3 e // modelActions. modelActions is an ActionGroup, by itself it( W9 f9 z' k% P" q% ^5 Y* D
// has no notion of time. In order to have it executed in7 N% R# S9 F8 w( H: V
// time, we create a Schedule that says to use the! r: k8 _# L$ Q1 d1 M. n. _; Q- ~
// modelActions ActionGroup at particular times. This p2 u. u W2 ~3 `# y
// schedule has a repeat interval of 1, it will loop every
3 X% c& E! ^6 S // time step. The action is executed at time 0 relative to
0 U2 L0 R4 ]* }& R; S! {, z // the beginning of the loop./ C9 j9 [' I4 d, ^ ^9 N s
$ H2 B ?7 C4 g+ w. v' u0 m; G
// This is a simple schedule, with only one action that is! L7 Z4 j; t6 T' g8 Y, ^! z6 n* D
// just repeated every time. See jmousetrap for more2 M: E, ^+ V2 D2 s# q |
// complicated schedules.
: ]* D0 T% C; g& a- ]) O4 z
* h! e+ W& E6 v& o8 p modelSchedule = new ScheduleImpl (getZone (), 1);
" ? s, W4 Q! o% X+ | modelSchedule.at$createAction (0, modelActions);% K0 @$ {$ j# L3 |
5 y* j" a* F+ L) e
return this;- }3 O) x7 |7 X l# T
} |