HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; e9 l" O. x' W8 [; a0 W" w' h: q/ b: S# h3 B
public Object buildActions () {8 l' w9 P& x4 d* _6 E$ c- R, H
super.buildActions();3 u' Y; d7 y8 M: M* y4 U/ S
x9 k) V$ g5 _1 [! V // Create the list of simulation actions. We put these in0 u- A, O _$ M4 t# S
// an action group, because we want these actions to be$ k6 i: d7 {) U9 I
// executed in a specific order, but these steps should9 e" x, ?( B Q
// take no (simulated) time. The M(foo) means "The message5 S" `2 \( I) k+ L5 q
// called <foo>". You can send a message To a particular. f' ?' o |7 E7 Q5 d
// object, or ForEach object in a collection.
# K" G: K6 x! e0 j
) g2 ]0 o) Y G. h // Note we update the heatspace in two phases: first run% d2 c8 m$ q) k( u, H% i
// diffusion, then run "updateWorld" to actually enact the
( P6 z# s( K+ Q6 [' ]4 Y) U // changes the heatbugs have made. The ordering here is
; I/ g5 I4 |6 z2 r* z4 s( q( A // significant!; M4 S1 c. D# m! I8 z4 A
% Q; n N& h# x: g9 U6 H // Note also, that with the additional' X' e: O6 w) A! V2 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; ~( z+ k; K" O" O/ ~: ~" b7 O // randomize the order in which the bugs actually run
! N$ N' F2 { t! _3 H& ?0 f6 a // their step rule. This has the effect of removing any5 M' N/ L* [6 V( E5 C% C, t
// systematic bias in the iteration throught the heatbug
& \6 g& [ {0 D: V% { // list from timestep to timestep
/ J6 u0 R7 t" N
; ~7 [8 ?& J. y+ `. B' \4 W& L // By default, all `createActionForEach' modelActions have
7 N1 _- L$ |+ E) u/ Q; u$ Q& \' y" d // a default order of `Sequential', which means that the
5 @7 d/ L3 s4 R0 @& D2 Z // order of iteration through the `heatbugList' will be
! ?; [6 |* s6 H1 N' c9 y# x // identical (assuming the list order is not changed
. O4 d6 D" H5 g6 P$ w // indirectly by some other process).9 T* I1 x6 l- X5 V
$ S, [- n$ e- r9 c2 x9 f6 I modelActions = new ActionGroupImpl (getZone ());
) C6 o1 g s5 z0 k) e
# s' g; ]& c) {* \/ N/ T9 P8 j try {6 \% U, R3 @ Q( C8 O6 U. G
modelActions.createActionTo$message5 s- v- X+ v4 H( J5 n9 ^: K& j
(heat, new Selector (heat.getClass (), "stepRule", false));
# m6 e y: Z |( F% n } catch (Exception e) {
# ^- }5 {; W& e) S) f5 i) t System.err.println ("Exception stepRule: " + e.getMessage ());
' {" D! k+ Q0 W' h" C3 k# S Z }
& `) Q, c0 t! }. e4 T, V( y5 `6 U L7 o3 C( U' k
try {* F H! s" N. l# N: u
Heatbug proto = (Heatbug) heatbugList.get (0);
" v. s) i {0 W' n9 T) W Selector sel =
) r8 h/ O& L2 c new Selector (proto.getClass (), "heatbugStep", false);
; m5 E/ |( ~0 X- O7 p7 O, C actionForEach =
$ f0 z5 w Q5 v% d" d8 Q modelActions.createFActionForEachHomogeneous$call U. J% w5 B4 D& F& j; i+ V% J$ H
(heatbugList,
8 U$ U: e4 S$ Q$ D1 q& g new FCallImpl (this, proto, sel,+ V6 r8 u& X9 j+ X! H
new FArgumentsImpl (this, sel)));9 Y1 Y8 d# ?0 `# t4 Z# c
} catch (Exception e) {
! x0 x0 _$ L% p; ?' q6 n e.printStackTrace (System.err);
) q9 |8 X; w( N; r% @ }
& S3 I, p1 c/ t 1 t3 h" P" o, s6 j) v$ f6 \8 p6 i
syncUpdateOrder ();+ |( P- A! [9 ~# ~: v1 f' F0 b% u
, m8 g' [* Y2 T p1 ^ try {
) O4 t8 D% }6 [2 w modelActions.createActionTo$message
9 t5 D) B1 Q/ g6 a (heat, new Selector (heat.getClass (), "updateLattice", false));
$ D* R% Z! K* ~1 ^ } catch (Exception e) {
( u( u- R4 M% P) w/ O System.err.println("Exception updateLattice: " + e.getMessage ());
( m5 x- o1 I; W6 Y; w, W5 f }: O/ }% f1 Y6 u% O* q; v' |9 t& O+ n* O
- a5 l3 [4 ?' W; \
// Then we create a schedule that executes the( R2 ?8 [: v3 b4 @# N& b
// modelActions. modelActions is an ActionGroup, by itself it
$ z: g) p% v& A( }6 X2 v. _2 a // has no notion of time. In order to have it executed in& X, d3 J- [# S7 y
// time, we create a Schedule that says to use the. ^9 v; E1 K. n( R" W5 V
// modelActions ActionGroup at particular times. This
1 A* B& D6 c z+ M: i$ C // schedule has a repeat interval of 1, it will loop every r' \/ @2 n. f" T1 j
// time step. The action is executed at time 0 relative to) C" S* ^5 B( j% C0 [% r0 `
// the beginning of the loop.% v' E/ u8 [( v- s* D) b
- c/ {4 g b7 _5 r) L- B
// This is a simple schedule, with only one action that is$ P9 q8 P2 h& E) v' C8 {& D
// just repeated every time. See jmousetrap for more* R' k a7 |% Z9 i2 Y. j; a! V3 e
// complicated schedules. Y$ s: r @( k, G
! F+ D; O" n, p1 C7 ~. V. | modelSchedule = new ScheduleImpl (getZone (), 1);4 d2 A% H; U$ p7 s
modelSchedule.at$createAction (0, modelActions);$ l* i" q) q' e3 D8 X g% m
0 v% z& _! V* z. a
return this;
4 y) s7 s4 F* b7 O8 D4 g& t7 e9 H+ | } |