HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' q+ z5 V4 @0 a/ j& j
/ t' F- U5 W& ^1 o p! E; K) H1 ^* z public Object buildActions () {8 l) j& n; |6 ^( m) m2 g
super.buildActions();
2 x) v2 s& i! _* `- w0 y
* w. s6 W6 {# G4 ] // Create the list of simulation actions. We put these in
7 p: y$ _( \6 n# u3 u g // an action group, because we want these actions to be
% j1 v0 q% ?) y! J5 Q* b3 |, { // executed in a specific order, but these steps should
0 V1 |+ x* r8 E2 w. [ // take no (simulated) time. The M(foo) means "The message
1 }2 q" |0 @" A* [( r // called <foo>". You can send a message To a particular
1 |2 x4 f! V: ` // object, or ForEach object in a collection.
: y3 @1 r6 v* r1 y, y
7 Z% V+ L1 o- ^0 }5 X // Note we update the heatspace in two phases: first run
% `1 G. x, J% g! o+ X7 ~ // diffusion, then run "updateWorld" to actually enact the
0 Z3 J8 t0 ]! c/ {) b7 R2 o( J0 z // changes the heatbugs have made. The ordering here is
0 l. z) ~- y2 p, l* { // significant!" G& _# A+ c4 W8 @* ]) ^: W
2 h+ B' k1 _. y( D2 A& n3 V
// Note also, that with the additional
5 H/ z5 \ |& `; j" m4 a; P // `randomizeHeatbugUpdateOrder' Boolean flag we can
, B y- ^, @' x" Y/ D" b // randomize the order in which the bugs actually run
9 j8 U3 @, p5 I+ r% _ // their step rule. This has the effect of removing any
9 E7 k) c5 E+ o+ \) W+ Q // systematic bias in the iteration throught the heatbug1 k% _# M2 L* B
// list from timestep to timestep, h4 |$ N! u4 l
8 K/ |* H; n7 Z; w, q& n' \$ h( Q8 R
// By default, all `createActionForEach' modelActions have1 L; W( K2 @4 c1 g# _) \1 |3 G
// a default order of `Sequential', which means that the
_ V/ R4 F# n7 j // order of iteration through the `heatbugList' will be2 g* `; x; S8 y# G5 |* K' P! `, {
// identical (assuming the list order is not changed
( {# ^: R) I" l // indirectly by some other process).
" [" {7 I" U j( w* j0 r6 O P 1 K5 I# W# f0 O4 [: [
modelActions = new ActionGroupImpl (getZone ());
' x/ q& m0 L+ V. D f. c! w% h5 d3 z2 J$ S* }3 i4 n0 S6 `" u
try {% A$ d+ G" m7 W$ Y* h
modelActions.createActionTo$message |. s1 C% G# [8 s9 Z8 r
(heat, new Selector (heat.getClass (), "stepRule", false));
3 V$ ?4 E* s, u6 y4 p. e2 ? } catch (Exception e) {
( k3 _1 i' k, N. e System.err.println ("Exception stepRule: " + e.getMessage ());! @3 D# ^5 y' y
}
8 [) p S1 {$ [( d" E( Y7 c( M- E4 ~
" {' a1 p8 e/ z4 g+ E try {
. ]6 x1 A5 v% L. R Heatbug proto = (Heatbug) heatbugList.get (0);" I4 Y$ A& c! T. b/ o% s- n
Selector sel = . @1 k N" P" ]3 b; }, D
new Selector (proto.getClass (), "heatbugStep", false);0 A/ I) y& S" M7 w/ p
actionForEach =
9 R7 f. s- { k' Q+ o8 Q5 L/ d0 e modelActions.createFActionForEachHomogeneous$call- Y0 |2 e& t( h6 N
(heatbugList,7 a9 t' b7 g5 ^' {& z% x: M/ @5 E$ y
new FCallImpl (this, proto, sel,
' q! M$ M6 W3 s9 T new FArgumentsImpl (this, sel)));
4 }) n! O- i% c. Q; { } catch (Exception e) {; n' |% J# ~' c% X3 K! E
e.printStackTrace (System.err);
% M& e( ~- P& g4 q2 F) H! R }
6 [0 V: Y X9 e
! M+ t$ E5 S+ k" m3 V. E/ q syncUpdateOrder ();. l6 {* f5 B2 d- ^! M% A
* S0 U( H D& w4 x4 p* q
try {
# C+ L+ u, ^, |! f4 j% }1 I modelActions.createActionTo$message
8 I: C0 g* P. O) |7 R' B (heat, new Selector (heat.getClass (), "updateLattice", false));
6 Y9 t( a% b+ d8 y } catch (Exception e) {
: b- I, B, Y9 o: u System.err.println("Exception updateLattice: " + e.getMessage ());
( W8 ?+ j4 D |- j5 L+ ]( R }! d, n' U8 p2 ?' }$ N
2 b6 h+ ~- F8 ^5 _
// Then we create a schedule that executes the
% ?) z% w( @/ o9 e% I // modelActions. modelActions is an ActionGroup, by itself it
5 V; R# i, o6 ? // has no notion of time. In order to have it executed in
- `" I; b5 Q2 V, \" m // time, we create a Schedule that says to use the
3 w6 ]+ `' u: U+ S4 Q // modelActions ActionGroup at particular times. This
9 v: I! O" c0 @' G* ` // schedule has a repeat interval of 1, it will loop every
& H6 ~: P; L. z; V6 y8 m2 w // time step. The action is executed at time 0 relative to w2 C( \8 q' ]+ a6 a' Z( k
// the beginning of the loop.
" T5 o: F v0 f2 f+ w8 E6 {; E0 \3 a+ t0 `2 C& {0 b$ i, n* X4 Z
// This is a simple schedule, with only one action that is
7 q p# ]9 U: p; o5 o // just repeated every time. See jmousetrap for more8 F, K8 G" R O0 ]2 G
// complicated schedules.
2 d4 Q) B8 @0 P9 Y
; u/ h1 m7 H; Q- N \ modelSchedule = new ScheduleImpl (getZone (), 1);
0 [ z9 J4 {( `, l% V0 |- f modelSchedule.at$createAction (0, modelActions);
- x4 g& P& r2 V, F& B+ X $ m2 J0 B5 Z/ n. z4 S
return this;5 J+ C1 h. r, J2 c. B
} |