HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, x' a2 ]) V6 g: Q: j$ M" g' G
0 |8 u$ R5 _, O9 L. l4 O' }& w
public Object buildActions () {7 S+ u. J: F! s% s4 e
super.buildActions();2 q7 S, L7 n, m& d' i4 B' T* i
0 ?4 f6 F E$ o7 b. x& q0 C
// Create the list of simulation actions. We put these in
, G* u; X( V/ y8 s9 v // an action group, because we want these actions to be
* F* H8 k7 w+ N. Y. x6 R$ \. E // executed in a specific order, but these steps should
( A; W5 G! {( X // take no (simulated) time. The M(foo) means "The message% X& G4 Z+ z8 G3 D* F" k7 y1 {
// called <foo>". You can send a message To a particular
4 i6 O+ I( K/ `7 E( ]% l // object, or ForEach object in a collection.
6 C2 i. ?/ g- B+ M( ? ( u3 ^6 S/ n# ~' m# q5 R
// Note we update the heatspace in two phases: first run
( ?1 z1 [. G, J9 Y // diffusion, then run "updateWorld" to actually enact the2 j& o6 j2 A0 M7 R* f& X
// changes the heatbugs have made. The ordering here is5 L9 Z2 A1 O8 @9 A A* x. V
// significant!
! w' o) ^, W' B& @8 q8 K
9 s/ V ]& x- M2 Q // Note also, that with the additional
" e; e: }' ]% v. W) b- i" N // `randomizeHeatbugUpdateOrder' Boolean flag we can% i& q% e8 d: E! r h: c
// randomize the order in which the bugs actually run
* h9 u; [4 i) i6 A2 \; B" ~1 o // their step rule. This has the effect of removing any
5 H9 }0 n. U3 Y2 S1 B // systematic bias in the iteration throught the heatbug& A: r5 ] ~4 w5 U, T( x# E
// list from timestep to timestep
; B# x- q: {& j U( J4 a) M
* y8 b$ _" F6 a& W0 F0 { // By default, all `createActionForEach' modelActions have
# H- N/ s2 D+ X7 \" L // a default order of `Sequential', which means that the9 I+ i: K" p- h4 t5 @- [6 O; j
// order of iteration through the `heatbugList' will be
% u7 h5 y1 d$ E/ P // identical (assuming the list order is not changed
4 J& n( v. j: e% \ T1 r; V) E9 R // indirectly by some other process).2 R( D; ?& Y- `: |7 _, k( B) Z7 \
2 Q6 u% c8 c( @; Z8 R2 I0 \, ~ modelActions = new ActionGroupImpl (getZone ());
- H" I2 }2 z* Z. |# D" h& W5 E9 x4 z
try {8 b$ H; h7 G2 {& `0 V, e" A
modelActions.createActionTo$message( c. q7 F& `: r. Y+ A$ V
(heat, new Selector (heat.getClass (), "stepRule", false));
* J/ Z9 w% Y7 x } catch (Exception e) {, h' c2 U5 V- F
System.err.println ("Exception stepRule: " + e.getMessage ());# F$ w3 I, x8 h" l( u
}% }3 P8 D) P. Z9 [$ t
1 K- H* G$ n& f& u. X! s try {# { k+ h: Z/ q
Heatbug proto = (Heatbug) heatbugList.get (0);
& T3 X( J2 Y4 D4 Q( Z Selector sel = 8 A) ~1 a W+ y, [6 H( p
new Selector (proto.getClass (), "heatbugStep", false);
2 }) I+ l g! E5 H( H- q% d actionForEach =$ S1 L6 D0 G3 H6 y
modelActions.createFActionForEachHomogeneous$call- [5 |+ v2 f+ a( ]+ g
(heatbugList,
o: |, e6 A1 A7 i. G5 p new FCallImpl (this, proto, sel,$ z* v! g; Y0 k( |( P; x9 Z* Q5 @
new FArgumentsImpl (this, sel)));& l+ {% J4 J9 ^
} catch (Exception e) {8 m* f% h: E* Q1 ]1 J
e.printStackTrace (System.err);* P6 W" Y# u2 D* s
}
' y0 ]- j: P- L% |* V, N) k+ N' v0 U l2 d/ t' j2 C) k8 }; b! `9 c
syncUpdateOrder ();
/ r" J6 l* ~$ S5 P% \2 q7 R8 S
: z, b4 _$ x( S try {
; d9 T. a* W8 f$ A. m1 }. S' E modelActions.createActionTo$message
8 }4 M+ p, x" T3 q4 K( x3 O6 r (heat, new Selector (heat.getClass (), "updateLattice", false));
1 S8 I( Z! S1 \! _ } catch (Exception e) {: ^0 `4 k( X4 Y/ G4 K
System.err.println("Exception updateLattice: " + e.getMessage ());
% |) U# T T$ |6 H7 n }6 N0 \( k1 @4 r7 ]# n
! j2 }/ i' C4 I1 | // Then we create a schedule that executes the
* c' }/ {" f3 F+ R; L // modelActions. modelActions is an ActionGroup, by itself it+ Q* E& N2 i, F
// has no notion of time. In order to have it executed in
. n+ y1 D6 b1 H/ ]4 T, N0 @7 P // time, we create a Schedule that says to use the# r4 ~5 u- `+ t/ \
// modelActions ActionGroup at particular times. This
. }1 F7 m% C' p9 @/ b' _0 Q9 A# Z9 e1 [ // schedule has a repeat interval of 1, it will loop every' N3 m* |, d: I; R: }8 N* d
// time step. The action is executed at time 0 relative to
) c5 p, N) m: ^ // the beginning of the loop.& M: ^/ ~- k$ k; z. |' M5 e6 A
$ q/ e! s1 i5 v& |9 r# U9 i
// This is a simple schedule, with only one action that is
9 v! j6 s, W2 f // just repeated every time. See jmousetrap for more
( ^6 m) a1 ?# Y$ W& P) { // complicated schedules.' t! `5 {4 n x) D% F! `0 t+ i
! q2 o' Z) [5 k; j; A modelSchedule = new ScheduleImpl (getZone (), 1);
* A: Q: P1 v, { modelSchedule.at$createAction (0, modelActions);: n3 l" L" E. P
0 T: K. Z5 }1 l: O0 | return this;! x" b, J5 Q5 [) |1 J4 y
} |