HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 D w! o# T. q1 R, I% E, `/ L! V, G3 X1 P& [3 `
public Object buildActions () {
?5 _/ \0 g' } super.buildActions();
; u/ L) Z' t D' f! l
8 A; J, E- `. k8 r/ f/ R d/ W // Create the list of simulation actions. We put these in2 P& U% g% @! y) \ c
// an action group, because we want these actions to be
( Y8 I7 Y& Z5 z. j4 P // executed in a specific order, but these steps should+ Q" z! r+ p3 q6 a6 v
// take no (simulated) time. The M(foo) means "The message
, W' {3 W2 ]1 u( r$ w% L" ? // called <foo>". You can send a message To a particular5 H7 ]; n7 ?7 s- ~2 q% {, Q
// object, or ForEach object in a collection.
/ ^* W3 l$ W- ]5 q( f9 d
2 V( u2 {# V1 B( H. F // Note we update the heatspace in two phases: first run5 l; _- g2 }3 V* r/ G
// diffusion, then run "updateWorld" to actually enact the$ v1 c1 M5 l: l! p' l8 O3 U
// changes the heatbugs have made. The ordering here is2 Q+ }! Q; ?, `
// significant!
b; t' E7 w" ~3 B; k
( a) v' e) w0 j/ ]$ {1 \2 S5 ? // Note also, that with the additional
# B& W3 A8 e8 S, l- y/ C // `randomizeHeatbugUpdateOrder' Boolean flag we can
! W$ R4 ~& m- ^& t5 x, {' | // randomize the order in which the bugs actually run) X; ~. P# D8 A5 x+ d/ m' I
// their step rule. This has the effect of removing any
' z3 {/ A. Z( ^, I // systematic bias in the iteration throught the heatbug/ V/ S, _. r9 S( @) |9 Z
// list from timestep to timestep
/ d) a' n, S$ Y2 I0 Q( U
. ~% _* V" t: G3 z // By default, all `createActionForEach' modelActions have
4 o% n1 z; B2 L1 @) J // a default order of `Sequential', which means that the
9 ~ ^* |: v4 ?% v7 Y; M7 \ // order of iteration through the `heatbugList' will be
# |4 G5 h5 F' M- n; [% E7 ^ // identical (assuming the list order is not changed7 ]/ c6 H- A0 F
// indirectly by some other process).9 H* R3 U$ l% y7 a3 Y
9 A5 A- i& b4 @7 ^ modelActions = new ActionGroupImpl (getZone ());/ X: E5 H4 T0 v
. E, d m5 ?, \. h
try {
4 N1 A, c, @8 k0 r7 W modelActions.createActionTo$message
; B3 B. f' R' u6 X (heat, new Selector (heat.getClass (), "stepRule", false));* @' u( {) F5 J6 ?: R0 s. |
} catch (Exception e) {
6 u5 s9 W. A9 B4 O9 b7 _ System.err.println ("Exception stepRule: " + e.getMessage ());% \5 ]3 F; `" }" A0 H& [% i2 ]
}+ i; Y2 H u! r% I
, l1 I# f) b! d8 P( t, f; n4 @* F
try {
! d6 J1 H; Z# E& v7 S; V Heatbug proto = (Heatbug) heatbugList.get (0);* Q4 C( U1 @) x) G- d' `$ C
Selector sel = " a$ a6 G1 w( G0 z1 _& c
new Selector (proto.getClass (), "heatbugStep", false);
+ C' C# E5 |* ~4 ~" c actionForEach =
4 ~/ A E, _7 b modelActions.createFActionForEachHomogeneous$call
. |: C6 R6 q! L (heatbugList,
3 K# p* B3 L1 `0 ^* {" G. b. @ new FCallImpl (this, proto, sel,0 u. \0 A0 T& V& U4 r8 R
new FArgumentsImpl (this, sel)));
9 b: V- t- }4 k4 O$ I5 o1 b9 k } catch (Exception e) {
& T) a* {+ _- {* U8 v+ t1 L/ ~ e.printStackTrace (System.err);1 J5 |0 Y$ x4 q8 C
}: y/ E3 F% `. l0 R/ F5 ?. j
9 c, x7 k: @# n8 P* C# L# n& ~
syncUpdateOrder ();( q% f0 }$ V( ?5 D5 S8 X4 ~+ v& Q
0 _3 E$ b4 n/ z& d$ x, u# `8 S try {
# D; f& b, n: C modelActions.createActionTo$message
( z0 m1 m6 y' Y4 [ (heat, new Selector (heat.getClass (), "updateLattice", false));
9 g5 Z8 X' h6 T+ S8 K1 M3 C& t } catch (Exception e) {$ V$ \9 S6 H9 B% z! _1 X
System.err.println("Exception updateLattice: " + e.getMessage ());
) a5 P* B \5 p }1 S9 P8 S. P6 b. f' G- B2 r
6 Q2 r' h* C" V) y' z, {) x
// Then we create a schedule that executes the; A" T, K/ X; @8 }, s
// modelActions. modelActions is an ActionGroup, by itself it
' o" u" ^" |6 O0 H* {5 M // has no notion of time. In order to have it executed in ]7 O+ s# `4 B) `2 {8 F
// time, we create a Schedule that says to use the3 ~& n( x5 g- A% Y/ D
// modelActions ActionGroup at particular times. This+ G. f- ]/ S, S; o' C1 z7 M( T
// schedule has a repeat interval of 1, it will loop every
+ e0 b) E3 Z" v* C% S' F% p // time step. The action is executed at time 0 relative to
5 C* P6 J1 p f2 Z% J$ l8 o8 v5 s // the beginning of the loop.
8 g: [6 x2 d, J1 q& ~3 b. h1 H2 t. q3 \% j v5 C
// This is a simple schedule, with only one action that is8 z) I2 J5 C* A" x% b) A
// just repeated every time. See jmousetrap for more m3 g5 Z2 Q: Z* R) Q4 w3 g4 {: |# U
// complicated schedules.
1 G' g$ i6 M6 y0 W : L v! f" M, j. U' ?5 Q# A' P1 j: R
modelSchedule = new ScheduleImpl (getZone (), 1);% [- S# ^- q& m( n# z! n
modelSchedule.at$createAction (0, modelActions);
9 Q9 J5 m. ~0 t/ T. } 7 {* u# \0 |5 b5 w/ N
return this;, V# n" w( V1 z1 P
} |