HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ c9 F0 J7 s7 s( e7 E- i0 H8 {
a0 h M- p# ?" X& Q# `
public Object buildActions () {, L7 U1 E( ^8 f, u' u5 `
super.buildActions(); J, ^; {2 x+ Z% x3 g
) {. Q: z, w2 W& `8 x: j9 k
// Create the list of simulation actions. We put these in1 H; h# M/ a" Q( K9 r# _( [
// an action group, because we want these actions to be" c; H7 m0 E E6 D" d0 y$ {& \
// executed in a specific order, but these steps should; v! h8 j. O3 J: L# b
// take no (simulated) time. The M(foo) means "The message$ D/ g: [. W6 B! J% ~
// called <foo>". You can send a message To a particular
a Y. N7 w; O h9 @' m // object, or ForEach object in a collection.) S7 s' b; h4 Q
$ @. e* \' ~1 _9 t0 u // Note we update the heatspace in two phases: first run
3 c: [. r: _4 ]9 o- [, W" a // diffusion, then run "updateWorld" to actually enact the
4 }. D/ c9 j; M/ G // changes the heatbugs have made. The ordering here is |% v2 L" D n- ^* ]" |- z/ ~; X$ Z$ z8 o
// significant!5 N& P: H) I- h. |3 S
8 K3 @ `9 P+ e' P$ U9 C& |% d$ n8 V; `6 b" u
// Note also, that with the additional; z/ c0 `/ ]$ n! ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- O' G7 q2 S& I4 V4 O6 O // randomize the order in which the bugs actually run$ q# u: ^3 E4 L' {3 X0 Y0 k
// their step rule. This has the effect of removing any" Q+ W, ~& I; {# ~
// systematic bias in the iteration throught the heatbug
5 I- _; T. v: a4 z, d4 J# y // list from timestep to timestep
/ f) F' F% N j2 {& O: p+ P * _. ?: _8 C/ a4 H0 O
// By default, all `createActionForEach' modelActions have1 _- |) ]. n) f! u+ B! u
// a default order of `Sequential', which means that the
4 m' C3 F$ ?+ a9 Z8 R7 }2 {; J& c // order of iteration through the `heatbugList' will be P2 u9 D! _7 Y$ z" u
// identical (assuming the list order is not changed! k3 b& G! j& ?2 b! q
// indirectly by some other process).3 I2 a+ F8 z7 C3 Q2 o. P
d8 |1 i* X3 {, e- o modelActions = new ActionGroupImpl (getZone ());3 D- a4 ? d- |5 [' X4 m' }
- u6 I4 v' F7 ]. f W# p
try {
' O2 H) L7 N1 C( k- q4 f6 v modelActions.createActionTo$message
5 T/ G" v( q$ g) M A: L0 E (heat, new Selector (heat.getClass (), "stepRule", false));
6 ]% V4 ^: s9 O5 ^' W5 n9 }/ Q& q& b } catch (Exception e) {% q! |% V$ }! F4 Y! [5 h
System.err.println ("Exception stepRule: " + e.getMessage ());5 w* `9 I( @' h+ {
}
' `, j$ r6 H& y2 D- t: e, i! W8 i9 C4 ^, N' v W
try {+ {' t# e. e6 w) P+ u$ R
Heatbug proto = (Heatbug) heatbugList.get (0);
+ s! Q6 x {$ y" i" M Selector sel =
, L) D4 [/ W4 l6 s! w new Selector (proto.getClass (), "heatbugStep", false);
- I/ S, H) e# [5 N/ F* ^ actionForEach =8 K1 }$ Z8 s- j: O6 v
modelActions.createFActionForEachHomogeneous$call
4 f9 `2 n- M1 |" J+ B* O- R+ O (heatbugList,
6 K0 d! Q7 Y/ w new FCallImpl (this, proto, sel,
+ @! P# o7 r$ |: f2 `$ X. I- E new FArgumentsImpl (this, sel)));
; l! S7 t W: V0 I$ @ } catch (Exception e) {' R/ N% W8 w6 ^. D! b/ _ I
e.printStackTrace (System.err);
) V% y6 e" a+ s1 i1 M }" b0 |9 w: {; _3 u- x4 w0 E
0 i; t. z2 A& P9 m# x) x1 C
syncUpdateOrder ();% c/ L5 v. m1 `$ L/ y- y
9 {1 `% R. G0 y6 F! S' o" g! t
try {
0 Q9 q6 Q0 M7 ]3 D. x modelActions.createActionTo$message 8 T" a! {" {5 z
(heat, new Selector (heat.getClass (), "updateLattice", false));
# j1 n* V9 A. I" S- U } catch (Exception e) {
0 ?: ?/ @2 h" { System.err.println("Exception updateLattice: " + e.getMessage ());; [* m! t- r4 Y" n$ m
}
% t8 J$ ?& H" X; `
, M9 a: U" Y; g3 B // Then we create a schedule that executes the% g: \' Y) \! y7 A# t+ f! y6 T6 T
// modelActions. modelActions is an ActionGroup, by itself it0 Q5 ?- k( t& E6 L, B* b' V; k% W Y
// has no notion of time. In order to have it executed in
' [2 ~ P! n8 C0 _+ _9 Q8 p // time, we create a Schedule that says to use the1 q, I( j" X& X/ J3 _5 U
// modelActions ActionGroup at particular times. This
, R" \9 m/ W6 q9 X+ ?- e- \ // schedule has a repeat interval of 1, it will loop every
: W) v! o5 w3 `! L" P5 E // time step. The action is executed at time 0 relative to3 L( b' T) {6 x+ |( T* l
// the beginning of the loop.2 l8 {0 b; t2 M
5 Y( E: J+ G* H1 y" _1 c
// This is a simple schedule, with only one action that is
* G* x# e7 O$ _( ~& m1 `& b8 p1 n // just repeated every time. See jmousetrap for more
3 T* u o; `% u7 N3 J4 O. D // complicated schedules.
% J# s7 C3 f M& K
8 @# M7 T# s, L& L# P: C. A3 d; d7 t& z modelSchedule = new ScheduleImpl (getZone (), 1);
3 X" I* V R3 b0 d+ N. C modelSchedule.at$createAction (0, modelActions);+ u# Z# O" m2 f8 n
% e- B$ y5 I( |1 l$ A' ] return this;# a, G( Y3 K0 L1 n, _1 K8 q, L
} |