HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 J7 B) d' Z2 ~4 J
% G9 g) d! v2 b* |7 q0 P
public Object buildActions () {
4 ]2 M' ?& G) U2 J super.buildActions();
. J# h' m( N/ B3 U- ` ' e P# a( A( n! t
// Create the list of simulation actions. We put these in
; X6 x/ T$ X+ S5 A- Q: d1 @ // an action group, because we want these actions to be
2 H+ X+ l; y" \0 P9 u# C // executed in a specific order, but these steps should/ }* F/ |$ D1 a2 Z
// take no (simulated) time. The M(foo) means "The message" h4 U7 ~& c2 u# j% _: j
// called <foo>". You can send a message To a particular
7 z, N# M+ v5 O // object, or ForEach object in a collection.2 {! P7 @0 m. S* u9 |
/ G; [! G; {7 k- Y' | // Note we update the heatspace in two phases: first run( i: e( c7 ]1 m! ]6 D2 O3 @: k
// diffusion, then run "updateWorld" to actually enact the
7 j0 e- W2 t' ^0 @( j" ` // changes the heatbugs have made. The ordering here is
% B8 B1 O9 @- |' `) H2 J, N; R // significant!. _! K# ^5 I4 }# y) g
/ R# s- u/ p! M" @+ R
// Note also, that with the additional
' n+ ]. C' a, |8 @" d5 v // `randomizeHeatbugUpdateOrder' Boolean flag we can, Z# D% |9 W6 `3 ^9 D
// randomize the order in which the bugs actually run) |( X/ N) C" K' c! D# ]
// their step rule. This has the effect of removing any$ j! R6 t" o* a1 E: V* c1 k" L
// systematic bias in the iteration throught the heatbug [9 L* _0 p! H. Y0 N
// list from timestep to timestep' x; ^' u# }# h6 P
2 m7 @" a" V7 o4 S$ `& D" Q; R // By default, all `createActionForEach' modelActions have, i/ H% U5 ?# S: A9 ?! m8 ~
// a default order of `Sequential', which means that the: ]( D/ S: ~% H8 i( \1 x2 @
// order of iteration through the `heatbugList' will be
7 b& R7 {& |5 L% S // identical (assuming the list order is not changed
/ E2 K5 A! h( Z) g1 ^* e) E // indirectly by some other process).
2 i$ {* f1 O1 s; c : F" d/ D; J1 |2 j
modelActions = new ActionGroupImpl (getZone ());
0 u0 C# h1 T* Y7 ]
/ n6 d4 O: U* V) g% [7 f try {7 Q% Q% W! i3 V3 D
modelActions.createActionTo$message
& A3 [6 \% ]; q9 @8 l1 r V (heat, new Selector (heat.getClass (), "stepRule", false));
9 \/ h3 Y: Z8 X$ a) w } catch (Exception e) {. n: q- x8 M: {2 j
System.err.println ("Exception stepRule: " + e.getMessage ());
3 O- f: r' n; @7 A1 c }0 S; m- X/ u3 z; D* r _" Q% U
2 y) L4 l4 Y* f/ A) d1 V
try {2 x, S. u! j$ [6 ^
Heatbug proto = (Heatbug) heatbugList.get (0);- `/ C1 [. i# |
Selector sel = `5 ]8 k5 C) J5 V3 |: e( X) k4 _
new Selector (proto.getClass (), "heatbugStep", false);& d( a& ?: Z) t/ W( V2 d
actionForEach =
+ {+ g9 v C. n3 ?0 ^2 M modelActions.createFActionForEachHomogeneous$call, _1 U. l& b9 i3 A5 i
(heatbugList,
+ U) w2 @# E, G- | new FCallImpl (this, proto, sel,
$ X! ?/ h0 h3 L new FArgumentsImpl (this, sel)));5 g0 S$ X2 O! K* m0 q7 O/ \0 k
} catch (Exception e) {
; K! d. m# r4 o$ ~9 b1 y+ w, V/ P e.printStackTrace (System.err);
& w- U6 o1 I5 X5 y }
# a! E; X' s8 n4 b
B5 K/ M$ r# N3 O' U* r6 F syncUpdateOrder ();
- d. V% q: O1 I" B0 J3 x; f: ]
try {
) i2 l$ M8 [9 S/ u2 D- o0 {. g modelActions.createActionTo$message
/ I+ b8 [% U1 r8 y: L" Q (heat, new Selector (heat.getClass (), "updateLattice", false));7 S' c5 Z# ?0 H2 z+ H. ^
} catch (Exception e) {+ u1 U6 y- k% W+ H0 m
System.err.println("Exception updateLattice: " + e.getMessage ());
2 N* X3 t4 h8 u+ S2 c& z. r |1 ? }/ q, v8 G9 T4 e! C; K
6 y& |% Q" r; q" E- Z1 e
// Then we create a schedule that executes the, }6 `% ^" | W; _: _4 l- D" |
// modelActions. modelActions is an ActionGroup, by itself it j7 v, T ]8 k1 ~: L0 X
// has no notion of time. In order to have it executed in' X8 F; Z0 i, ]# x: j
// time, we create a Schedule that says to use the( F. J- P: {/ E
// modelActions ActionGroup at particular times. This4 V2 q/ M) k9 a, f3 x" w
// schedule has a repeat interval of 1, it will loop every4 O- G( x) j- `" R {- q T" M8 \
// time step. The action is executed at time 0 relative to: a: h& b- u. q6 n8 O2 m4 e
// the beginning of the loop.7 w+ Z, Q+ {2 {$ c6 J) c* m
& F+ x- g: U- z$ f. r) t
// This is a simple schedule, with only one action that is
; a* _6 y2 J( S) j! T // just repeated every time. See jmousetrap for more, D" r' L3 S, N" n- k: x" J
// complicated schedules.
* I0 k3 W K7 m- {( j+ V
0 ^$ O8 Z9 y1 k& N' Y* N+ L modelSchedule = new ScheduleImpl (getZone (), 1);
! M2 e+ m6 I' f- d3 ] modelSchedule.at$createAction (0, modelActions);
, s$ t; { T; q( \* x0 r: d* D5 j
" w5 R. }$ T3 L3 Z- O/ k% | return this;
1 p# c I) b S% X% D( i! ? } |