HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 ^) B1 g5 H5 G1 S4 R
$ A: Q- k# C0 F" v5 ^3 W public Object buildActions () {9 d6 |* V2 Z9 w8 i9 i/ g
super.buildActions();
9 L2 W2 \* s( x- m" \+ ~; p
% |1 Q2 q1 v- Z9 O0 H/ U% e: ? // Create the list of simulation actions. We put these in" z2 |# [" m5 K
// an action group, because we want these actions to be
3 z5 s% y5 c! V3 e o3 p& _/ c. \4 K // executed in a specific order, but these steps should
: d9 l) j9 k- j, k // take no (simulated) time. The M(foo) means "The message6 F3 o, l7 f: l U1 p+ V. o
// called <foo>". You can send a message To a particular
) U" I5 _* W, S# j2 I+ r // object, or ForEach object in a collection.
. O5 ^% C2 H; i% w! @! C
" I* b" V; ?7 L9 \3 f% S // Note we update the heatspace in two phases: first run
: ?/ m" r1 }# a4 O+ E: n // diffusion, then run "updateWorld" to actually enact the; U1 X6 K5 U' A- C$ Z1 r) G, W
// changes the heatbugs have made. The ordering here is8 P2 E0 E n/ Q9 d' L
// significant!( O: c3 J9 G3 u0 |3 c6 S
. ~6 ^ X3 m% g& o* s2 x
// Note also, that with the additional5 U6 A$ ^6 ^6 m( p
// `randomizeHeatbugUpdateOrder' Boolean flag we can G$ O4 P' `: P8 g8 U% m7 w0 N
// randomize the order in which the bugs actually run! u) J7 }( V' P, k3 b. ?! F) ^
// their step rule. This has the effect of removing any
6 M9 P1 e/ X1 {# m9 W# Q: ] // systematic bias in the iteration throught the heatbug, T/ W; [# f/ ?$ V2 h9 y% i4 f
// list from timestep to timestep
; g4 H1 [4 w; E; o. _% \ 9 ~% b. u" x k5 z
// By default, all `createActionForEach' modelActions have
! h% U. c' r& K/ R8 x // a default order of `Sequential', which means that the; R8 U$ f* W6 Q8 Q
// order of iteration through the `heatbugList' will be
/ {6 ?+ T1 B# V8 ?' s$ H // identical (assuming the list order is not changed
' f5 e, n7 J+ P // indirectly by some other process).
; H6 I1 L C: q/ [0 l0 V5 d
, Y( [& h' l: L2 ? modelActions = new ActionGroupImpl (getZone ());
0 K0 v* l! L! `7 v/ i" U2 M4 `0 ]0 V' C$ s
try {0 V1 R3 S( {5 ?) K8 T
modelActions.createActionTo$message
c& ?8 O ~4 T3 _8 W. I, c) d (heat, new Selector (heat.getClass (), "stepRule", false));
; U. A% B8 x% d' W6 |- J8 {& H/ G } catch (Exception e) {2 j0 Y) M" K, {+ i& g: }
System.err.println ("Exception stepRule: " + e.getMessage ());; i* R8 Q( F4 t) F2 d) Q- Q& J
}0 w7 q) m9 b1 u( c& f7 d, H! M
2 t+ ?2 F8 S1 Z
try {
5 ~% c+ d8 @( @: Q$ X5 ~6 ~$ ?/ _) v Heatbug proto = (Heatbug) heatbugList.get (0);
) N8 n2 ?1 ~8 b+ j9 H4 a Selector sel = ' Y, }5 C, E; @' n& v' j
new Selector (proto.getClass (), "heatbugStep", false);
: q7 x% M R% _ actionForEach =' | V7 ?- c- g3 o8 n* b& I7 z* r# C
modelActions.createFActionForEachHomogeneous$call
( H) _; R0 o. `1 E6 \. \ (heatbugList,
( [( K; z1 Y3 S: J$ h& u7 r$ Z' G! Q/ ] new FCallImpl (this, proto, sel,7 ~* k+ l+ Q8 f+ h9 `+ B: C9 f
new FArgumentsImpl (this, sel)));
2 y* O3 O+ Q$ g) X% r } catch (Exception e) {
, r# d+ q% U) l- O* D- I/ Q e.printStackTrace (System.err);0 V5 p1 \' G! Y' j9 C
}
* k l5 U7 H* S
2 _8 V/ p2 {6 c syncUpdateOrder ();+ o) v. n: C2 Z7 A; |/ v
a% A+ Z1 H& [) ?
try {
6 A" W, ]" ~4 M' A3 l# l) E/ H8 \ modelActions.createActionTo$message 0 u9 A' l- r, _) a* w. g
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 q, I3 X/ o2 \+ o5 p- R } catch (Exception e) {$ X. e: ]/ e7 Y$ E( }6 G
System.err.println("Exception updateLattice: " + e.getMessage ());
5 j) v3 e/ o B) r. R q" C1 b e }) ^% A) E2 L7 t: }1 `# o
* T M3 ]4 p0 m% Q. c! S( D
// Then we create a schedule that executes the9 F' E1 H& \) E6 a# a0 n e' v
// modelActions. modelActions is an ActionGroup, by itself it
* o+ j7 j1 n, l& \7 p' G7 ^ // has no notion of time. In order to have it executed in" @' Z3 j; s; w% u: G' x" L
// time, we create a Schedule that says to use the
' D7 v/ t* Z C& @+ m. l1 G9 A // modelActions ActionGroup at particular times. This
& S: `5 g( O+ J/ f* W& ` // schedule has a repeat interval of 1, it will loop every
3 l7 }" Y+ U7 [! Q // time step. The action is executed at time 0 relative to
, \/ J1 \( X8 o+ i8 T7 F( @4 T7 H // the beginning of the loop.
4 C! n0 ?: Z8 w) L1 b) I
5 L0 v# P8 B+ H7 A. ? // This is a simple schedule, with only one action that is w9 K2 a3 m. g
// just repeated every time. See jmousetrap for more
' O5 A8 ^' q1 X# v7 Y$ b& r! n7 O // complicated schedules.
, A1 k2 A Q& w& H) G& |& b " P, c7 u1 [2 c5 ^* H. d
modelSchedule = new ScheduleImpl (getZone (), 1);0 k* _# ^4 w+ H3 p
modelSchedule.at$createAction (0, modelActions);8 s& p2 ]+ ^% C( g+ {, {: s
8 ]. o; L D4 O1 {
return this;5 m% ^3 x4 v+ ]1 a
} |