HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 r! M- o( K. {( d9 Z' a; z/ R
1 `( a3 I7 j" E. ?0 @ public Object buildActions () {
0 L0 V' y! x) z' [; B, y1 l super.buildActions();
) @0 ] C; D8 W 8 H7 `- G+ K f% y9 m9 m6 f
// Create the list of simulation actions. We put these in$ z/ P8 J2 c% K4 R! v. e
// an action group, because we want these actions to be) z- ~5 n- `; o. L( {: d
// executed in a specific order, but these steps should
" Z1 R3 q3 V7 S/ @) z& x5 Q // take no (simulated) time. The M(foo) means "The message
) [" `% F0 [% d8 N/ j // called <foo>". You can send a message To a particular
8 Y4 e& j/ J1 _7 f // object, or ForEach object in a collection.
0 r# b9 M! l( P4 r: \' B : O7 C' B1 k0 ~: u% {
// Note we update the heatspace in two phases: first run. y- Q/ `& g2 y+ l" N d5 e8 Q4 M
// diffusion, then run "updateWorld" to actually enact the& ]- q. `) u& E( T- J; W! s
// changes the heatbugs have made. The ordering here is
9 \7 {$ F. J7 D1 O // significant!
2 c" _0 w# y# V
, v4 u* G. O7 Y3 R1 N$ b" ?! W. ]# E // Note also, that with the additional% z6 |/ O' I( T' o2 [8 X- J
// `randomizeHeatbugUpdateOrder' Boolean flag we can, u, Z; q( ?; {6 A) x4 C8 c8 j. r
// randomize the order in which the bugs actually run$ E4 h' \' d' n, b. G/ U
// their step rule. This has the effect of removing any2 \. c8 p" e# B0 r& x# H( d8 q3 y* q) B
// systematic bias in the iteration throught the heatbug8 T* U" e# @7 e8 P" o, T- V
// list from timestep to timestep& I1 Z) Y# j. f* r
$ N$ l; B5 o$ {5 @7 M& @1 Z // By default, all `createActionForEach' modelActions have
: E2 n5 b0 v5 b" J: l# A // a default order of `Sequential', which means that the
4 ~- c6 K/ D; v1 |0 c6 X2 } // order of iteration through the `heatbugList' will be) l X/ K; e* O! `" u1 Z
// identical (assuming the list order is not changed
: r9 v4 H% b; Q- a( N // indirectly by some other process).
' }2 D f& w. ]/ _6 U
' _) H% M+ s+ U( | modelActions = new ActionGroupImpl (getZone ());; T- L/ }* T' @" R# i5 J8 s/ f& E
( r0 X, |! G/ z2 j' X' B
try {& n& ?) w- Z* h' _0 U4 a5 B
modelActions.createActionTo$message
! F1 E3 G3 O- _ \) f t (heat, new Selector (heat.getClass (), "stepRule", false));
6 V* e: q6 H$ U T } catch (Exception e) {9 _7 S" [' Q4 S! M
System.err.println ("Exception stepRule: " + e.getMessage ());& o: S1 {) N$ E' u) N6 u
}# ?0 ^7 W/ M2 c) M. }
$ Q; i: U0 F/ a1 x
try {
: y* n1 u& @3 o% M; \0 D3 d Heatbug proto = (Heatbug) heatbugList.get (0);
$ F+ d( X- @. C3 [ Selector sel = . l8 T+ Z# {; C4 @( t6 @, y/ d
new Selector (proto.getClass (), "heatbugStep", false);
2 a: o5 r2 W7 F# D5 q0 a8 j1 {$ K actionForEach =: d, `: Z! _% A8 F3 i& ~/ e
modelActions.createFActionForEachHomogeneous$call g5 y, z9 v* Q2 [6 H9 {8 `
(heatbugList,) B& }9 u9 c3 D) `$ H8 M: W
new FCallImpl (this, proto, sel,
7 g! [8 N- O8 o2 P8 m new FArgumentsImpl (this, sel)));" h+ a8 N3 a5 p: y/ e7 w
} catch (Exception e) {
+ Z0 x h9 W: F) { e.printStackTrace (System.err);9 `0 r( v6 V. w; n, q: ^8 K
}, F4 q) _; [* P/ j
3 j+ e) ?7 `9 g syncUpdateOrder ();
. a# r; h9 J$ |( B
* l3 V* X0 Q# T5 G P try {
. k0 S! { _* v' l# } modelActions.createActionTo$message ' r4 l7 |0 N# d9 G$ b
(heat, new Selector (heat.getClass (), "updateLattice", false));) Z# d; ~$ s1 }4 V% d( Y
} catch (Exception e) {
$ x) W' o2 ~6 f System.err.println("Exception updateLattice: " + e.getMessage ());
1 y& Q- _0 p( i& F9 F: I }( e! I: [$ c8 e2 Z# Q9 O7 R
# B8 s) w: Z2 E- C, \: J
// Then we create a schedule that executes the) ?) A* W; p) b' b
// modelActions. modelActions is an ActionGroup, by itself it
& p" w5 ?6 N9 c# {8 t7 k; { // has no notion of time. In order to have it executed in
# t7 I2 F* j% f" ~2 W9 [ // time, we create a Schedule that says to use the M- _% i- D( h% f2 t6 [
// modelActions ActionGroup at particular times. This
: Y; }+ p& y. \" s( m8 t // schedule has a repeat interval of 1, it will loop every
% Z$ |3 ^/ t" z" ]; U // time step. The action is executed at time 0 relative to
3 a$ n3 e3 s( ` // the beginning of the loop.
1 W$ q' Q n' B. ?! M2 |" g* u, p% e2 J+ ^$ K2 B+ ]# G
// This is a simple schedule, with only one action that is6 P C6 ]" t8 S7 ]2 `8 V
// just repeated every time. See jmousetrap for more9 r* P- [: N2 n+ ^+ A$ _
// complicated schedules.
. a2 y* k6 L! L- w+ | 9 U: J& \1 C( |4 x$ x7 N9 J
modelSchedule = new ScheduleImpl (getZone (), 1);
" E' F) h9 g# A- C9 Q! x* E modelSchedule.at$createAction (0, modelActions);8 D/ O% \- e- A: y5 t. c
' Y8 J% D1 {8 b: @* f: i. l return this;
4 }8 q) S" {' Z' T } |