HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( r/ Q) ]' ]0 A! j" N0 S/ ~
. G- ^- Z" d. o7 \' [5 H
public Object buildActions () {, J7 R B8 A* H" I1 `
super.buildActions();
7 L" N7 ~ f7 n( f
. J) q# S" ~0 {2 e* I" a // Create the list of simulation actions. We put these in" H7 k! n3 T9 E, {, ~
// an action group, because we want these actions to be" m& v6 s* w3 v1 E: v
// executed in a specific order, but these steps should5 {/ k$ ]9 z4 A( k9 Q2 m
// take no (simulated) time. The M(foo) means "The message
$ [6 j" [# E1 g$ B6 M // called <foo>". You can send a message To a particular
. @3 g2 C3 p! M# I: C* e // object, or ForEach object in a collection." t/ }# U4 g6 {2 K- [! ~: ^
; N7 s" Q; u+ O1 M9 { // Note we update the heatspace in two phases: first run
+ l( X' H9 q' T4 S4 `+ H$ T // diffusion, then run "updateWorld" to actually enact the
4 j5 T6 p6 _5 q0 F' E& H4 @ // changes the heatbugs have made. The ordering here is" b% O* V0 H) J2 Z' }
// significant!
+ O# P# ^+ w" T% J* l
! n; P w% I- l8 J' C // Note also, that with the additional* e' \& J7 i1 v- P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 g. M, C4 k; E) q // randomize the order in which the bugs actually run9 c3 S0 o, E. p0 _0 G3 f& @# k" s
// their step rule. This has the effect of removing any( H+ x/ ~/ ]4 C0 p/ O" I" b
// systematic bias in the iteration throught the heatbug
# q8 Z+ |: r$ H8 S // list from timestep to timestep
- w* {7 w6 @- F
, b. L# g' n* ]2 O" R/ L: L% F // By default, all `createActionForEach' modelActions have% x* J* D8 F3 l. ~( F
// a default order of `Sequential', which means that the# C* j* ]6 h" J1 H
// order of iteration through the `heatbugList' will be6 J) M( V3 `6 ]
// identical (assuming the list order is not changed
3 t5 Q% q# I2 l8 x; Q9 v" R! M+ K // indirectly by some other process).
' q# C4 d2 E3 R ~) u& `' f
( D/ L$ o4 f9 q+ U+ j modelActions = new ActionGroupImpl (getZone ());
* d: Z* c: Q: K( M, J
1 E( D7 r& A4 C: V: @! S3 j7 j. j try {
3 d8 ]3 G( @' Q8 @& C5 _ modelActions.createActionTo$message
% `5 B4 N; `0 E; x (heat, new Selector (heat.getClass (), "stepRule", false));2 l3 \1 H4 n# A8 \7 \% e5 U( l8 }" F
} catch (Exception e) {, \* I8 d, F& \+ U0 u3 H0 @" b
System.err.println ("Exception stepRule: " + e.getMessage ());* X+ @7 P; t0 ^( [
}
' a# m D$ \/ y1 u! X% i$ ]% B
; F$ D) K4 L) J7 z- d' [ try {1 @# F$ _3 Q- }2 M5 o6 Q, O
Heatbug proto = (Heatbug) heatbugList.get (0);1 {8 Y, u' r& n, N7 k
Selector sel =
q. t* ~5 B4 J* V) g% s5 s new Selector (proto.getClass (), "heatbugStep", false);" S2 A- R+ o4 b* b# u
actionForEach = z, L2 R; U' U
modelActions.createFActionForEachHomogeneous$call
8 H5 q4 ]: @3 y* f, q- K (heatbugList,3 m3 z7 a: o3 S! d4 I
new FCallImpl (this, proto, sel,
5 E; ?1 Y2 z: O& z new FArgumentsImpl (this, sel)));9 f. g d/ `; D1 q) J1 @8 _3 `! ~: B
} catch (Exception e) {
, w: S% W" s; W* d4 x e.printStackTrace (System.err);
$ {# s0 D5 j5 l( Z" U }7 D! Z& |% J. i
: H1 f4 @# X8 H( M
syncUpdateOrder ();
/ U: u, O1 G" K$ D7 l9 [
7 P% t* h- _( w1 y b try {7 d/ z* f; v" i/ y% _; b
modelActions.createActionTo$message & c+ d% [# B# J2 |
(heat, new Selector (heat.getClass (), "updateLattice", false));9 l& @' r9 H1 _( g4 G. {
} catch (Exception e) {
2 ]0 \2 b6 F4 V/ y; T! p8 \ System.err.println("Exception updateLattice: " + e.getMessage ());2 n. O$ q4 d3 J% A( J2 I% S! p
}
/ `3 l# R6 V* {: h
) }8 U$ a& f. C* B/ |- h // Then we create a schedule that executes the% x5 u# m# @- i W5 c2 p7 V
// modelActions. modelActions is an ActionGroup, by itself it# o$ r2 }( o- R3 L, t$ X* x
// has no notion of time. In order to have it executed in; w# E8 L/ B. c4 B% U
// time, we create a Schedule that says to use the# ~, ~ ^, B( W3 \0 H1 F
// modelActions ActionGroup at particular times. This
; d3 S2 z5 }0 z! }: ^* x, H! P* b( C // schedule has a repeat interval of 1, it will loop every
* X7 H7 w( `0 R% R8 o% p: ` // time step. The action is executed at time 0 relative to! D5 Q& X4 Z) `* e
// the beginning of the loop.* N, ?' U9 v* D9 Q- t
: p9 D7 H7 q' T
// This is a simple schedule, with only one action that is) `- s; G8 W! j5 ~
// just repeated every time. See jmousetrap for more
5 _& j* S7 o, U7 n // complicated schedules.( k' K6 e$ T' K4 G0 f
# n7 U3 N( ]8 s, r9 D( r
modelSchedule = new ScheduleImpl (getZone (), 1);
5 @- l; S9 ?* X8 }5 W& {/ N' u modelSchedule.at$createAction (0, modelActions);. s/ B6 h+ u1 Z( K
0 |1 q; v: F+ [
return this;& U( Z1 G* l7 I9 V
} |