HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; |8 U! r% |# a
& j: R6 C- N. ^; y* X$ s+ I6 C6 |
public Object buildActions () {( K# X" ]$ d7 y$ o. H
super.buildActions();5 ]- ]* O( h- u! f. _1 G
% Q* z* ^2 p# S4 ?7 D1 l$ {8 g" F: q
// Create the list of simulation actions. We put these in
6 `% H8 Y9 R& s8 B( S // an action group, because we want these actions to be" E+ [! x1 {. k/ u
// executed in a specific order, but these steps should
- M: ?2 J) I* W* ^4 a // take no (simulated) time. The M(foo) means "The message4 x( v8 i7 a* i: s- a
// called <foo>". You can send a message To a particular
8 F {0 V1 N' T% L0 b- T" N2 M1 ~ // object, or ForEach object in a collection.; b4 z8 o+ P3 \4 |2 i9 t& v
- g. S' i' {- N* h/ | // Note we update the heatspace in two phases: first run
6 S8 a: m: S& Y9 B" Q // diffusion, then run "updateWorld" to actually enact the" O7 f$ g9 y% A6 s# Q8 W
// changes the heatbugs have made. The ordering here is1 B$ } L5 p u: h) J& k: s
// significant!
6 _& g# u: ^+ X# h, B4 T& d& Z ( a: q2 G1 O( q
// Note also, that with the additional, B7 ]% L0 z) l! Q. z6 }
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& S' |9 F; R( z7 k! X8 i // randomize the order in which the bugs actually run5 x" I' ^5 U1 K$ J/ Y; Y l8 X
// their step rule. This has the effect of removing any
8 {& i0 W9 z$ s1 S: @! M+ [ `' x // systematic bias in the iteration throught the heatbug
7 v+ y& w( ?% ]9 |; w! Z // list from timestep to timestep
, s- R5 c; i0 X$ B- z, v* l+ n 4 s: ?5 k/ B. L3 n3 @& n
// By default, all `createActionForEach' modelActions have
. J1 K: Z0 K& V // a default order of `Sequential', which means that the% }7 H* u3 w3 @4 d) h; n1 Y5 N
// order of iteration through the `heatbugList' will be
3 P7 m% P1 i9 A1 @+ S( D // identical (assuming the list order is not changed
+ f7 _- w# [. m8 l, A! J // indirectly by some other process).
/ |7 Y: [" X1 I7 _' J 2 ^7 W7 z& c8 e2 _6 m4 d
modelActions = new ActionGroupImpl (getZone ());
5 ]# L' b% s8 L: ?
9 D- S" o& U8 O$ o) B& {1 U( [ try {3 y: ]2 B& V2 A& r0 L- P& A) O
modelActions.createActionTo$message
1 t: `: z- H, _; ?" B$ W" P (heat, new Selector (heat.getClass (), "stepRule", false));
8 _6 W) h8 I( j! T- i } catch (Exception e) {' ?$ V5 H* u* |
System.err.println ("Exception stepRule: " + e.getMessage ());* s' s% c( s+ `
}$ K0 S2 Y" t/ d
4 v! g0 C; |+ B1 E, x9 M* G try {
8 X" ~* |0 m0 H4 t5 t( r; A, Q# y Heatbug proto = (Heatbug) heatbugList.get (0);. \) k+ D8 ~: g8 u, o1 f) l8 C
Selector sel = % H8 x! B* X9 l+ x
new Selector (proto.getClass (), "heatbugStep", false);
5 [6 \7 h5 n+ E1 m actionForEach =, s6 u0 x# m% i* K2 E
modelActions.createFActionForEachHomogeneous$call$ M9 c" D8 @2 m
(heatbugList, D( P* E$ Z& W$ i
new FCallImpl (this, proto, sel,
! r! T& o8 F. l% I" K% K new FArgumentsImpl (this, sel)));
: v# G& e& O! r, c! \% e } catch (Exception e) {
+ r4 S# }/ h x+ U3 d, {# Q e.printStackTrace (System.err);
' s* H$ P C2 ^/ k }- z/ g/ U u& m* M% i# J2 n) W
2 Z8 N' v# z, o; H0 D' k5 Q# x
syncUpdateOrder ();
% R0 K0 m0 q: f& v# d5 O7 w/ p( Y0 v9 {* d* O
try {
4 S0 C- W& {: _8 A. w; n modelActions.createActionTo$message
4 k# ^* [ m7 ] (heat, new Selector (heat.getClass (), "updateLattice", false));% N9 @. s0 Q4 r t$ |* B
} catch (Exception e) {8 L- p1 l* a1 q) Q# X
System.err.println("Exception updateLattice: " + e.getMessage ());
1 e+ f: q7 Y: t( X8 E) b# l }* V5 {/ I* K1 e3 @' n
2 F: o( q6 A. U$ H- J5 ^
// Then we create a schedule that executes the
9 L" [9 S, q- l9 O! D- K // modelActions. modelActions is an ActionGroup, by itself it
! C2 l% v! j2 {; K // has no notion of time. In order to have it executed in# o5 N4 G( f( Q6 L% n1 E7 d
// time, we create a Schedule that says to use the5 Q, R5 {- u& n0 h& N) l
// modelActions ActionGroup at particular times. This! T, R5 p! H C$ o1 T) b2 B. k
// schedule has a repeat interval of 1, it will loop every
+ I5 I' [0 `' ~2 Y+ x. V // time step. The action is executed at time 0 relative to& I3 @$ ^5 }: n6 O
// the beginning of the loop.
6 u e' v( ^9 k2 l8 f4 B7 i8 M6 v
9 R: p7 {9 h+ w: d% O // This is a simple schedule, with only one action that is
3 l- C( f; G) T) p5 i8 L1 K7 b // just repeated every time. See jmousetrap for more
4 h6 z* e: h# \7 j/ k% \; L // complicated schedules.
. E. O9 f& u* x
; L- P% f' k8 b modelSchedule = new ScheduleImpl (getZone (), 1);: C" Q9 ]1 u" x. I+ V3 E* e4 h
modelSchedule.at$createAction (0, modelActions);0 J8 M& l. s7 w- ~' z
1 g- c$ [. V4 f A& \ return this;$ `9 [& `+ S. Z5 Y' v
} |