HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 ]* ^3 ?4 ~8 w) w
1 C% l& @; T, N8 L3 k0 T public Object buildActions () {) O. U S+ e) N0 m
super.buildActions();
7 ~9 B# i$ P; F4 U8 J6 l # C$ h( f% T4 N8 n1 ~
// Create the list of simulation actions. We put these in9 v6 A M2 s- f- M
// an action group, because we want these actions to be
8 A+ O( s" h: o9 X/ ^7 @ // executed in a specific order, but these steps should
$ @8 v( A9 E% K$ G // take no (simulated) time. The M(foo) means "The message
' L6 ^& z8 V6 \" A // called <foo>". You can send a message To a particular, r0 w/ o$ m) g3 c6 N3 Z. D/ ~
// object, or ForEach object in a collection.
0 v& Q* ?( x" H7 h+ {! Z" [
V& `: R4 l- W6 _" H // Note we update the heatspace in two phases: first run: X- n. H6 _3 `' K9 Q6 `: ?, X
// diffusion, then run "updateWorld" to actually enact the
9 c( W- F& M3 i2 Z // changes the heatbugs have made. The ordering here is: Y* L; U! L3 ?4 B7 h6 \
// significant!1 s3 p; ?3 x$ S1 h0 F' ?
2 }4 @3 f) R2 E8 k$ W- Z // Note also, that with the additional+ X) [/ q: A7 U( G
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& i+ g$ `1 q. e% n/ l // randomize the order in which the bugs actually run
2 e0 H) |; Y. E, | // their step rule. This has the effect of removing any
P x* f1 D% d; |( y3 b // systematic bias in the iteration throught the heatbug: X2 v+ z4 b- ]& V
// list from timestep to timestep
7 p, W, [9 j: A k
" |+ I* t% m& `+ F3 a // By default, all `createActionForEach' modelActions have9 ^% a/ G0 S5 Q
// a default order of `Sequential', which means that the( d2 G" f, T t0 c6 x! C* t" g" c% o
// order of iteration through the `heatbugList' will be
2 @& S- h/ d4 n" r, l% Y. ^& g // identical (assuming the list order is not changed
% W. Z# |0 \/ b$ T( g3 L // indirectly by some other process).6 \2 A4 o8 D( H: V
% c# g' h5 r/ v3 q8 |( n, x% m
modelActions = new ActionGroupImpl (getZone ());6 b) t+ m+ R+ J2 y7 }% O) z
- V6 \# n1 B4 Y1 R try {
0 R+ l3 Z* F+ h) P6 Y- g modelActions.createActionTo$message* F4 b+ u N; D! }$ j- _
(heat, new Selector (heat.getClass (), "stepRule", false));
8 X I( r2 r* ^% W) T } catch (Exception e) {. x; H8 s0 W2 z/ d" q) { b- p
System.err.println ("Exception stepRule: " + e.getMessage ());+ a- A$ h" t% |: B! U Q( c8 H
}/ V s$ `. u/ ?* b9 q: t
' ~2 j0 e8 Y$ H; s
try {
0 x6 a, f' u: }' Q9 u. @: C/ b- q Heatbug proto = (Heatbug) heatbugList.get (0);$ ^1 Z' e( c" i: W' A
Selector sel =
, i, q9 f/ @& E6 K! q new Selector (proto.getClass (), "heatbugStep", false);- A$ Q+ T0 k z, b) C' M4 J3 p
actionForEach =
; c2 {1 d: ^. ]4 R9 G% n modelActions.createFActionForEachHomogeneous$call1 U- [6 Q: J- p* P" y# Y
(heatbugList,; ?! }" x0 T3 H/ I! }
new FCallImpl (this, proto, sel,0 I) m/ r |* Q& ~* b
new FArgumentsImpl (this, sel)));
6 r- R2 H& r. Y- o7 U6 H7 t } catch (Exception e) {
) v2 d- O# T! y4 m* P3 n e.printStackTrace (System.err);
' Z1 {% n8 @5 \( D }, e! z5 V) q' g4 h3 u$ a- q' U
e8 v+ k6 i; n9 G
syncUpdateOrder ();
7 r" Z9 g$ t4 ^
: X8 h& A1 G; V: O5 _9 Z& E try {) G: F$ V; E/ v" J7 l- D/ h
modelActions.createActionTo$message
3 z+ Q* M+ O+ J. M (heat, new Selector (heat.getClass (), "updateLattice", false));
+ I) _4 `& r: n. K7 Z } catch (Exception e) {6 f! o. E7 |+ x7 h& }
System.err.println("Exception updateLattice: " + e.getMessage ());$ B, o! u) o' ]; O( i
}- m7 Y5 B$ i' O
% T- l8 F. J9 w6 J" r$ x // Then we create a schedule that executes the7 ^1 G0 C) c( i$ b& V1 C
// modelActions. modelActions is an ActionGroup, by itself it
( l7 F7 m% Y8 V4 l% I- L" ]6 e3 Q // has no notion of time. In order to have it executed in
8 b5 I2 a* Y g4 ?( E // time, we create a Schedule that says to use the5 Y1 G; a) K8 D" T( [
// modelActions ActionGroup at particular times. This/ `; a5 K0 h; X# T
// schedule has a repeat interval of 1, it will loop every& a/ T1 L6 j) t2 A7 \* q6 ^
// time step. The action is executed at time 0 relative to
$ ~4 G2 U% r5 Q // the beginning of the loop.5 k1 V5 W z. i% U
% l% G% a% g/ N/ V1 O5 A
// This is a simple schedule, with only one action that is; |( b- ~( B" y3 `" ]
// just repeated every time. See jmousetrap for more4 v1 {1 i1 t1 ]& f; `/ A8 g
// complicated schedules./ H, z9 l0 O# y; I$ U8 Z, T$ ]
F. i( {: K/ F ?
modelSchedule = new ScheduleImpl (getZone (), 1);8 ]* y" R$ y( S) g6 G; k7 A
modelSchedule.at$createAction (0, modelActions);
1 {5 m' m# f0 S0 u% q0 s % C% h/ t/ ^- O i$ e+ L
return this;! K+ |5 e& s" m; S+ i" R
} |