HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. y. J' r% W" E6 K
* K* U4 Q, a4 y8 k4 | public Object buildActions () {
! U0 j5 g9 p. V super.buildActions();
6 s. ?9 h* D( x% A : x O, e" j2 s4 d
// Create the list of simulation actions. We put these in) y$ \7 s9 B: m; u7 b& P; h: i) I {
// an action group, because we want these actions to be! v, e3 K, t' }; j3 s
// executed in a specific order, but these steps should
# z+ z: c+ K3 R6 `/ a; M // take no (simulated) time. The M(foo) means "The message
% M7 q! g7 ^' h7 F // called <foo>". You can send a message To a particular+ Z# c p: {: g+ O3 F5 U( {
// object, or ForEach object in a collection.
' f3 D8 H/ \* b7 e- N$ ?8 O Y
# o( m. b H3 b+ F& K' [ // Note we update the heatspace in two phases: first run
: E% L; J; |0 s+ B' d // diffusion, then run "updateWorld" to actually enact the
( X& h3 G i/ B1 E+ I: A7 Y( ~ // changes the heatbugs have made. The ordering here is
1 q' O: f+ s J9 h g // significant!
& v( U" g8 D0 F
( z1 U- y: w9 \# T4 I U, t // Note also, that with the additional" R! j; k- o8 R# B
// `randomizeHeatbugUpdateOrder' Boolean flag we can' q) O2 _" B# S" f% L
// randomize the order in which the bugs actually run
1 ]! D. d* Z! w& b& o$ S- ] // their step rule. This has the effect of removing any
9 m" l2 e3 I: [& |3 t) o // systematic bias in the iteration throught the heatbug
* Q% T* b0 o, s* } // list from timestep to timestep
' g/ @7 h |3 `. l% o4 a8 d
. ^' t; d3 w: Z2 Y S // By default, all `createActionForEach' modelActions have
& X) v) ~: {0 i; h0 g3 z v5 x. \ // a default order of `Sequential', which means that the5 m( X! h2 I& [9 b# f! Y
// order of iteration through the `heatbugList' will be
0 ~+ C" j5 d' G5 ` // identical (assuming the list order is not changed, [( \- L) U$ N b* p+ X& o
// indirectly by some other process).3 \+ ]# ?$ n, G
% v4 N# Q" k5 `% E) \( Z
modelActions = new ActionGroupImpl (getZone ());
4 J/ S' h+ L* |& Y/ q. o) I: A4 {5 x/ t6 k7 F' X- e- _: c
try {$ @/ s- O0 M4 V4 `
modelActions.createActionTo$message- C1 P& b- Y3 P! s/ F
(heat, new Selector (heat.getClass (), "stepRule", false));
# |4 t# ?* p! m G } catch (Exception e) {
2 H5 {: T, O* u3 `* G0 X9 s( } System.err.println ("Exception stepRule: " + e.getMessage ());
8 I0 E& f0 T, V% r u1 m( p }
9 c( T4 T* N% t; l- w5 n! s
' D% g6 r( E. K$ }1 @ try {
/ C- v) f2 a& w- l3 n Heatbug proto = (Heatbug) heatbugList.get (0);1 l! M7 ]: Y( B# p+ v" W1 S
Selector sel =
; a0 G! g; f7 g) B$ f( d. t' k# X new Selector (proto.getClass (), "heatbugStep", false);, |) I; J; W# G. d1 G3 I* h
actionForEach =
4 l8 G" M- O" R* c5 A modelActions.createFActionForEachHomogeneous$call
) `: p' `' v/ z. S E (heatbugList,; g m: w# N. `& w+ a% j
new FCallImpl (this, proto, sel,/ W; k$ D! N: \* m$ W
new FArgumentsImpl (this, sel)));
' o1 T2 y; p8 z( B9 s8 ~( J } catch (Exception e) {% M y/ b6 Y& o" ~* ?
e.printStackTrace (System.err);
j9 P) t8 a0 `' T6 i5 B }
( L2 J7 f5 L6 b) G5 N5 b
# T: o2 ?5 s% g8 i' Q syncUpdateOrder ();6 y. l) ?& \+ @' ~0 w% K
2 E# l- s; A/ q! u
try {
$ ?! P) R8 {1 K* c k) y. b modelActions.createActionTo$message : D% b& i2 @$ R* J
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 l) T& w/ P: }, W1 [2 Q } catch (Exception e) {) U* a/ u. w E$ W$ [
System.err.println("Exception updateLattice: " + e.getMessage ());
9 H. ^' W' \5 p* M }
$ P3 i% }: u: d
# r+ h& j/ ]0 v, a7 W$ ?6 U // Then we create a schedule that executes the5 J$ ^! y, k2 D; }% {" z
// modelActions. modelActions is an ActionGroup, by itself it3 y: @/ d+ y/ R& ^. ^5 }# m* z
// has no notion of time. In order to have it executed in
; k- k4 v+ f% [1 e3 I+ f- R# C // time, we create a Schedule that says to use the6 D5 J% Z# z. C+ j
// modelActions ActionGroup at particular times. This
6 ~7 @& N3 b. V! ^: i" f( k // schedule has a repeat interval of 1, it will loop every1 _* j- l6 `, l2 e4 L/ H% V
// time step. The action is executed at time 0 relative to
+ S5 [6 p% V/ v7 y // the beginning of the loop.- i/ E1 y8 H+ ]' y2 b6 k
* a$ ?* W; e; A2 h; Z. ^/ h
// This is a simple schedule, with only one action that is
5 \0 g' L3 }8 y% X: ]' I* ] // just repeated every time. See jmousetrap for more
. g9 Y# p" H" R, M9 p // complicated schedules.
; V e+ \* w0 E' X
' |' Q. g& j0 f' t7 }6 R modelSchedule = new ScheduleImpl (getZone (), 1);7 m; R) \8 ]( ^. Q$ L- U
modelSchedule.at$createAction (0, modelActions);) I4 [- R& B* F- X0 s' F
7 U& a! m# t2 Z/ h. N
return this;" o# E. M( A0 }* X6 x2 _
} |