HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) }; B+ F0 I+ ^* f* x2 {5 E
8 c# P, [" y- V1 P: [; d" g public Object buildActions () {
" V( R9 B3 }5 t: E' k8 w super.buildActions();! T% C2 l r4 ]. f. u( {% t
# l: K" p, |9 d) b
// Create the list of simulation actions. We put these in; c0 y5 H9 b: l4 P, g
// an action group, because we want these actions to be8 n. \2 t9 }% x9 C8 c" o. f
// executed in a specific order, but these steps should% t9 d8 P* M' n! @
// take no (simulated) time. The M(foo) means "The message
2 s2 a4 f$ J" | T% G // called <foo>". You can send a message To a particular
4 u1 ^% C: Q+ S' V& ~ // object, or ForEach object in a collection.
5 \5 N J, M6 S' F& ]2 A0 X 8 B% \9 @+ S8 w9 @/ e& N( z
// Note we update the heatspace in two phases: first run
/ Z: n2 R/ m' ~, i& i0 j* x // diffusion, then run "updateWorld" to actually enact the; \9 W& `1 @8 ]6 q+ ]
// changes the heatbugs have made. The ordering here is" W" p+ J1 m- P
// significant!: a' j' F% k; D- u+ w' w
/ X! E( v' ?& }) o0 @5 u // Note also, that with the additional; J( h# e/ v1 p8 X9 c- I
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; l1 v& H J- _3 w: | // randomize the order in which the bugs actually run
7 e; G0 X* ]4 n9 k4 l7 }$ a // their step rule. This has the effect of removing any
2 @3 y6 C* l/ d$ P // systematic bias in the iteration throught the heatbug
8 X( F6 i7 H1 r8 _- G ] // list from timestep to timestep0 p# h; E2 L( h4 o
) M9 b; O( A, {" u: w // By default, all `createActionForEach' modelActions have" b4 k# B- f% x% n ]
// a default order of `Sequential', which means that the7 {# @2 Y. S- U. |
// order of iteration through the `heatbugList' will be& t: {( i3 t/ p( I( s' @+ P
// identical (assuming the list order is not changed5 H, k" v, s1 B, b5 [/ C% a
// indirectly by some other process).
+ L2 h' D7 i7 r. B# Y5 F7 D8 T: R# i& `
2 z$ C. ]+ Y r1 k modelActions = new ActionGroupImpl (getZone ());! u+ L+ l4 W/ f8 r0 c2 a
) Y) D9 k. E L) _- f try {
1 t* n7 u# `* j. L6 M1 S) y, O/ b modelActions.createActionTo$message; l2 k8 n& m: g+ {' L# N* j
(heat, new Selector (heat.getClass (), "stepRule", false));
W% z' v+ ~7 P- L1 D& R: n } catch (Exception e) {
8 e9 [- Y3 z6 x! A Y8 r; i1 T' l0 \. K System.err.println ("Exception stepRule: " + e.getMessage ());
$ U& }% o6 B8 w5 \ f6 \ }
, H- f2 n4 k% R
- Q: f1 z5 b V& s+ \; l ] try {
4 E; ~$ H$ m/ Y: ]4 n$ V' v Heatbug proto = (Heatbug) heatbugList.get (0);* ]/ n k# v8 D
Selector sel =
% ?: s5 v: n1 u) r new Selector (proto.getClass (), "heatbugStep", false);) L" |9 F) K3 c2 o0 }3 N1 w, _
actionForEach =1 e0 v3 C6 l% |2 y- o8 A
modelActions.createFActionForEachHomogeneous$call' B' E! N2 O9 d; e
(heatbugList,: X. Z+ G' f/ Z/ J5 i) W$ o
new FCallImpl (this, proto, sel,/ S! ?. T" O* P3 ]% i9 O( b" g
new FArgumentsImpl (this, sel)));
* Y6 S6 S6 v+ z } catch (Exception e) {
U7 G( S9 s C- u9 N9 K9 Y e.printStackTrace (System.err);4 _- q! t3 i J+ A: D
}1 Y3 D8 g# g7 d g% {$ n" ]
9 G% U8 M0 q, f7 A' B2 o/ S
syncUpdateOrder ();
# @3 K. O% z: n9 ^
, X9 q! G8 b8 r7 y7 M: B3 O% ^ try {
4 `' r6 W# K6 Q. A. r7 Q modelActions.createActionTo$message
: a9 w, Q, e7 L$ E( w (heat, new Selector (heat.getClass (), "updateLattice", false));0 C& L' D# s9 y' O" R% O
} catch (Exception e) {
t! B8 _8 y$ i# |( \4 X- C System.err.println("Exception updateLattice: " + e.getMessage ());
- |1 w% u4 |/ T }3 c2 L* w2 ^. y) i# b7 a! \
& x1 ~! D3 {+ L+ H5 ~6 u0 f // Then we create a schedule that executes the
# c2 p7 y; f* K. t // modelActions. modelActions is an ActionGroup, by itself it
" v/ m% G3 H' ` // has no notion of time. In order to have it executed in8 z1 a" I+ W/ l7 W; d
// time, we create a Schedule that says to use the
8 m7 B# b8 ?# R7 R) x // modelActions ActionGroup at particular times. This
- Z# z4 j# |0 T6 X9 H // schedule has a repeat interval of 1, it will loop every
- D/ g/ d; |+ a; C7 f // time step. The action is executed at time 0 relative to
$ m& [$ d8 h' D( s4 W* f9 x // the beginning of the loop.
% y- U% u7 o1 l6 Z3 F) ~. J& V$ B6 F# ?4 P4 F; z
// This is a simple schedule, with only one action that is- z' g' N0 p e/ l- M l t9 v
// just repeated every time. See jmousetrap for more! e8 ?5 E+ F3 A% G
// complicated schedules.
" ?1 z, A( {7 I% D- c 5 T% Y( B1 D4 x O0 |" Y$ _) W- c
modelSchedule = new ScheduleImpl (getZone (), 1);; r6 y: z7 Z: G/ z" w
modelSchedule.at$createAction (0, modelActions);
$ G1 r8 w" v6 ^1 { ; j$ i! h7 d* V3 \/ n. y& T
return this;
# n. c& q0 q* P. S } |