HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 @9 V- ?" h0 T3 c0 c0 \2 J
7 v- U: n1 M* F( r public Object buildActions () {8 h8 i( D, R! l* n
super.buildActions();
( T$ {8 s% @! y8 t' h
, J2 ^ @+ D2 D // Create the list of simulation actions. We put these in, {# Q0 q. W! o! f5 x& y
// an action group, because we want these actions to be
9 A7 J4 M6 o9 n1 k5 ?! u7 | // executed in a specific order, but these steps should. S$ ], V$ C7 a$ S; }, ]
// take no (simulated) time. The M(foo) means "The message
% _$ ~( K* ~" [8 I // called <foo>". You can send a message To a particular& W; O, D6 Q% W+ R, X! G7 b
// object, or ForEach object in a collection.
0 @8 e* I$ ]$ a, p- n
4 z& N1 u1 I F3 x. T // Note we update the heatspace in two phases: first run
/ ]3 \) l6 q6 V0 r3 E // diffusion, then run "updateWorld" to actually enact the
* z; _0 S( r- Y // changes the heatbugs have made. The ordering here is- G( ~0 U B: Q' W" ^5 i0 [
// significant!* {7 d% `& Q9 c, B
4 k, o" o' ]# c z* A) C% w
// Note also, that with the additional9 \! _) I* W H) W2 }$ p0 _ M
// `randomizeHeatbugUpdateOrder' Boolean flag we can( [( k5 R3 `) T+ E7 m5 n" X3 ]% j7 V' Y
// randomize the order in which the bugs actually run- g4 m0 B' c$ ]% t4 h* E. ^# N
// their step rule. This has the effect of removing any# Y' L/ ^2 y6 V% I
// systematic bias in the iteration throught the heatbug4 g# C& b% s% T) b+ E) D
// list from timestep to timestep4 U0 n4 q, F4 T) r( z5 b) A/ _
7 T6 ?: b" g5 H1 u3 F9 v8 O
// By default, all `createActionForEach' modelActions have# A) M# g8 d& s
// a default order of `Sequential', which means that the
; l, c5 L Y/ @ // order of iteration through the `heatbugList' will be8 l6 d' W5 z+ B0 A6 _* E4 E
// identical (assuming the list order is not changed( o% t. Q, I$ P" @, z1 _
// indirectly by some other process).1 T8 A" u5 x/ n. D, z( \2 O$ E
0 ?0 n# q/ O& o3 \8 m9 x modelActions = new ActionGroupImpl (getZone ());* T7 Z/ t, E* i0 |2 f5 A
' T& f" S+ E6 m: e! I# F
try {# B! D4 z& a2 ]6 h2 d
modelActions.createActionTo$message2 y2 v* A& `, K5 r) Z" c
(heat, new Selector (heat.getClass (), "stepRule", false));
- R' \5 A7 W# z( D } catch (Exception e) {
# {5 m( f+ V4 ~% ]% d' b) T System.err.println ("Exception stepRule: " + e.getMessage ());) h" i5 F0 q- i1 S% y
}1 Z' N8 k2 Y0 a: N
3 k3 c9 t# o5 s
try {
/ k% K$ j# Y U% M N Heatbug proto = (Heatbug) heatbugList.get (0);7 {9 y4 T0 w$ J% o# V
Selector sel = 3 p. H/ `6 R0 ]' N: X& G2 Z* H
new Selector (proto.getClass (), "heatbugStep", false);& A' U" X/ J$ T, _, u
actionForEach =" ~6 w+ i$ v1 P4 `" @' g* O$ O
modelActions.createFActionForEachHomogeneous$call
9 `3 s5 ~+ v0 G: W( r/ Q8 ]$ |# l (heatbugList,5 X2 Y: Z/ U+ L. e8 |+ Q3 s; L
new FCallImpl (this, proto, sel,6 \/ m" r W# d; `! ]) k7 g! ` y
new FArgumentsImpl (this, sel)));+ `8 { K+ }$ W# U# z
} catch (Exception e) {
+ l3 k5 U8 A- P# Y0 b e.printStackTrace (System.err);
( Q% ?4 v$ T+ d a1 q8 I }' ?$ V# t5 k; {9 F
. \+ J$ ? j& M4 ?: z syncUpdateOrder ();1 o @: S# i \/ h0 ^6 z
* {2 Y& o4 d3 p: ~1 ^ try {2 B" o) U. l8 ^: y5 c. J" r
modelActions.createActionTo$message : q P6 E/ Z8 x4 Z5 \, U
(heat, new Selector (heat.getClass (), "updateLattice", false));
( ^! q1 z6 L0 N6 n } catch (Exception e) {
1 G5 s) r3 X& G5 Y& q) E! u; i System.err.println("Exception updateLattice: " + e.getMessage ());
) n# a0 @! S( Z- E9 b }1 p& s3 k+ `+ ?" N
+ L! i1 |1 ^ N! }, O* W( [ // Then we create a schedule that executes the
$ _. h4 T; X4 w: ?) ~/ Z // modelActions. modelActions is an ActionGroup, by itself it2 n% Z1 W/ r0 r3 x0 [
// has no notion of time. In order to have it executed in
8 [$ u+ M% |* U, } // time, we create a Schedule that says to use the
' e' f6 ]3 k G# n // modelActions ActionGroup at particular times. This4 E/ ?, F, R$ d7 X
// schedule has a repeat interval of 1, it will loop every
5 Z% ~" x4 Q' {. ` // time step. The action is executed at time 0 relative to1 e' N- a. o5 i7 W) M* k
// the beginning of the loop.
2 N2 d2 v' C3 B7 ]' Z7 H
6 g9 z- d2 `4 x# H5 h // This is a simple schedule, with only one action that is
0 Q, J8 L: P9 `' m+ \ G // just repeated every time. See jmousetrap for more, R, I# W. A: ?1 S3 `$ D) m
// complicated schedules.' o( }# b! Y* M$ C$ g# O
% p: Q. `7 Z9 R/ i1 ^* h: ^0 S2 w2 n modelSchedule = new ScheduleImpl (getZone (), 1);
+ _3 C f6 {$ [, K: P. ~4 v* q* e modelSchedule.at$createAction (0, modelActions);& p- R7 S$ [# F H5 g) X
w: I6 V+ e E7 {& \ return this;
0 ]8 ?" \4 `0 ]5 W) D' |$ U7 C } |