HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, y6 }, W- G, c% v1 b
% Q: D, v8 J. R( f% L0 c public Object buildActions () {
& b% k' a" x" [6 ] super.buildActions();
) t ^7 x T, |
) u( B* r4 P x& O+ X // Create the list of simulation actions. We put these in4 K: |6 \% K/ @. A
// an action group, because we want these actions to be
5 }# X! C" l. V8 ? // executed in a specific order, but these steps should* f8 G2 _' D& S' D$ S
// take no (simulated) time. The M(foo) means "The message
, V: k( F/ E9 p1 ~; P. t // called <foo>". You can send a message To a particular
. Z% {* o4 M* L // object, or ForEach object in a collection.& L0 B2 b& O; P3 `2 ~
5 j6 W& [: `# l9 D( p' _
// Note we update the heatspace in two phases: first run
6 J' D+ k8 R4 t7 X( c // diffusion, then run "updateWorld" to actually enact the7 L6 z) y' U5 _9 Z% |
// changes the heatbugs have made. The ordering here is, M6 P9 B' X* B0 y! Q3 o: p$ D
// significant!
& X2 K3 C, V8 o' F' B' m
- P5 } L3 Q4 p( E" |: r // Note also, that with the additional; a, e. B) t3 \8 C1 w. }
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 H( c; Q( z9 J* B7 a# T // randomize the order in which the bugs actually run, f1 \ f5 I7 z s) R- ~# o
// their step rule. This has the effect of removing any8 _" b! X: E! H) O4 x0 p" ^
// systematic bias in the iteration throught the heatbug# W5 z W0 G7 p6 R s/ S5 A
// list from timestep to timestep4 d5 W, F1 i/ w1 h) C" R7 d; h
/ ^9 {5 S h6 ]8 K- b) c // By default, all `createActionForEach' modelActions have+ y0 X2 g5 o ^' O
// a default order of `Sequential', which means that the
5 ?+ U+ l0 e8 W- h% y // order of iteration through the `heatbugList' will be
3 K+ k- x, V* o4 D. c5 w% x, `' X' [ // identical (assuming the list order is not changed; z) S4 ~1 y9 f% ]- t
// indirectly by some other process)./ T6 v( @' T* F7 a: h
/ S6 C/ V$ [5 \" e. E# E modelActions = new ActionGroupImpl (getZone ());3 m" K, u& w- O' b: H7 R9 v' O( M
v& S7 W5 K8 B8 l8 ]( n try {
/ Y9 Z6 _4 Y* j1 E. w* r9 B modelActions.createActionTo$message
, u. n( z/ D% N (heat, new Selector (heat.getClass (), "stepRule", false));
5 @& M f0 ^; V* B* K6 c } catch (Exception e) {
, X) H" k; u3 `/ D1 g System.err.println ("Exception stepRule: " + e.getMessage ());$ E, ~1 @+ \+ X' @2 Z! j, Y1 g+ O% O' g
} s, R+ \$ O' l( h8 u
/ t7 T# y4 U7 _& T, v try {. A0 n; ]* V+ F' h% B6 y
Heatbug proto = (Heatbug) heatbugList.get (0);. R- b+ w* @' |* S! o, A
Selector sel =
. X( M+ x& Z/ v- o; K new Selector (proto.getClass (), "heatbugStep", false);# S. I/ v, A' g5 D. q
actionForEach =
# z( i2 W4 y7 W7 ]4 V modelActions.createFActionForEachHomogeneous$call
( g; d" g* f( ]! y, L7 B( y (heatbugList,
* `+ d8 l4 `2 R o+ i new FCallImpl (this, proto, sel,1 B! Q* Q2 C+ O7 N# s+ P
new FArgumentsImpl (this, sel)));
. p0 I, M2 X' \: K: W } catch (Exception e) {
3 l2 p! }& D% j1 B) M$ [7 V' W e.printStackTrace (System.err);
" E/ S1 g. ~5 l1 ^ }! L3 E4 v, g* l% g: ?
9 ~$ i9 k7 ?' Z2 _ syncUpdateOrder ();
5 s5 ^' X% {% G; `6 c
) {4 P0 _( y8 U T try {
# ]4 G" ?* s: ~1 e$ @& p modelActions.createActionTo$message
|* H# D T4 k& O (heat, new Selector (heat.getClass (), "updateLattice", false));
+ R6 z0 N' C: n } catch (Exception e) {
2 i! m8 y: R* U2 ?; f System.err.println("Exception updateLattice: " + e.getMessage ());
& \* w' d1 I" \/ l; G L }& |! ]+ O. l) P5 H3 w: R( \
% E4 `7 J( H1 H! B% I3 ^1 v
// Then we create a schedule that executes the
4 i2 k5 b7 r6 A3 o1 b // modelActions. modelActions is an ActionGroup, by itself it; m8 Z3 n u! R/ ~7 b: `( I/ g6 Q, ?$ G
// has no notion of time. In order to have it executed in7 `! I. Q0 U4 {& Z, R# P& Z
// time, we create a Schedule that says to use the8 z+ N) i/ O( r2 ~7 A
// modelActions ActionGroup at particular times. This& ^0 I- m; f9 O% p. ~
// schedule has a repeat interval of 1, it will loop every( C- h, j6 d$ x& ^
// time step. The action is executed at time 0 relative to
% V" F# d) R$ g6 l) d // the beginning of the loop.2 m: k" e; s1 C, y
; _& G% @! p: _- c6 d // This is a simple schedule, with only one action that is% L- z* i) `4 p( _: d, L+ P
// just repeated every time. See jmousetrap for more& i! _9 X+ A6 C
// complicated schedules.- i" ^# o4 X6 o( ] L
. Z- `/ D( W1 C& B! ?* t
modelSchedule = new ScheduleImpl (getZone (), 1);
) M( m# w1 h, e/ I- W9 u modelSchedule.at$createAction (0, modelActions);
# U' G a) T( m 1 Y/ o4 W% e8 h, V0 h) M3 j
return this;
8 z# |0 x) W! |& u- | c) v# p } |