HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 H/ f- d( s( H: C3 @. A
& x7 N8 S& ~9 u& G5 v0 M: S public Object buildActions () {0 q. H( u& n! c
super.buildActions();
0 g. T- Q& h, E. A / T* c' [7 {. ^; K0 `6 b
// Create the list of simulation actions. We put these in
; [! e' i9 W ] M6 q% M // an action group, because we want these actions to be) j1 R& H; q- r
// executed in a specific order, but these steps should! o: g' | I7 T$ h9 y
// take no (simulated) time. The M(foo) means "The message
+ Y+ B' `5 v! t# y // called <foo>". You can send a message To a particular
) ]( n n3 b+ ^4 S" Q // object, or ForEach object in a collection.$ c! p+ c; L' i: ?" p( d
% ^6 B8 j6 i0 q" D, c9 T
// Note we update the heatspace in two phases: first run+ B* H+ [1 X: d/ E. z% V
// diffusion, then run "updateWorld" to actually enact the2 G, ?, L4 t9 g w. ]; Y! h
// changes the heatbugs have made. The ordering here is
6 m% L& x' \- w5 Q1 v \: f8 J // significant!3 C* _* V4 d) w, _% Z4 j
6 h, v! q% f5 j. J4 I0 m. c+ f // Note also, that with the additional
6 F7 B5 B: B# v // `randomizeHeatbugUpdateOrder' Boolean flag we can
T8 u, ^6 P& }( J* y4 l // randomize the order in which the bugs actually run
8 K+ k; |5 D( U8 M! G! r // their step rule. This has the effect of removing any8 j: Y$ s6 F t8 h9 A8 E5 R
// systematic bias in the iteration throught the heatbug; f5 }- |2 s/ Q3 [9 s0 I. x2 E
// list from timestep to timestep
6 h6 |; L1 q3 z
5 E; d7 N- c0 T# X // By default, all `createActionForEach' modelActions have
; W/ _( g! ]' u) x // a default order of `Sequential', which means that the5 L8 X. `9 E" c0 d7 e" O. b7 R$ u! C
// order of iteration through the `heatbugList' will be
% b' u2 n, h, F9 F8 e4 }; [ // identical (assuming the list order is not changed
% S% v. N% V" ^+ W8 @ // indirectly by some other process).
4 \. O7 h/ s3 d( W$ l/ m
( D; `: }# C% F modelActions = new ActionGroupImpl (getZone ());
9 }% C Y) j+ u: v) P* |* W9 f" q( b: q0 T4 j! ]
try {% m/ e @) t, ]3 ~# f# }
modelActions.createActionTo$message
6 J; ]! e/ k1 Z3 A v (heat, new Selector (heat.getClass (), "stepRule", false));. G. E7 r8 j/ Y$ ~: @( [
} catch (Exception e) {
) Y$ r) ^3 u, f; X System.err.println ("Exception stepRule: " + e.getMessage ());
- ~: A$ f# c3 B5 h1 l }2 Y l/ v p- `6 v, V) m3 ]9 a( t9 s J
, X& [* V9 r2 D* _' |
try {
}, _& U2 E+ i Heatbug proto = (Heatbug) heatbugList.get (0);" Q- K) W# T$ p) E, _- `
Selector sel = ) u( m+ p3 O0 V3 @; P' Z3 c4 H5 R( Q
new Selector (proto.getClass (), "heatbugStep", false);
5 Z% F1 V) [/ H actionForEach =
+ K5 e! p7 _' x" z3 {+ ]. O modelActions.createFActionForEachHomogeneous$call. P d. [3 Z8 O6 D! M
(heatbugList,
4 J, r* R6 C z: J4 ?6 L new FCallImpl (this, proto, sel,% {; c$ `) L" ~, C" b5 _* v
new FArgumentsImpl (this, sel)));
& N4 n. p$ Y, L# m0 w } catch (Exception e) {. D1 ]# V- |2 h3 r; J3 R. L# i
e.printStackTrace (System.err);4 w" v2 k0 D. J$ \. O4 U' E9 y
}1 J J) e0 l3 a% A$ M- }
7 W; _8 @7 }) |& N7 \
syncUpdateOrder ();
5 h6 f- i* K% {4 ` c6 Z- o9 L
. t" u4 ^9 `3 ?: L" K try {# D+ S. |9 `3 }% y7 W5 _) F
modelActions.createActionTo$message * Q! z/ I# j w+ x
(heat, new Selector (heat.getClass (), "updateLattice", false));
& L2 f- U8 O7 n6 A, j+ a } catch (Exception e) {
: V' U- K$ g7 b7 o1 { System.err.println("Exception updateLattice: " + e.getMessage ());
+ C' f. T( A/ B9 Z4 m7 x1 A( X }
& g6 s y4 t8 i/ J ! S5 s* y$ W: v: \) d' O
// Then we create a schedule that executes the K, ?! e$ C& Z! o+ y" k
// modelActions. modelActions is an ActionGroup, by itself it9 l: c: U+ L* `/ f- L
// has no notion of time. In order to have it executed in5 }; _8 M! w( C- y% j) O
// time, we create a Schedule that says to use the( H7 ^& b: T. {) p0 E
// modelActions ActionGroup at particular times. This
( h6 I& ~% |: }- K8 m0 Y // schedule has a repeat interval of 1, it will loop every; \; ?: ]3 h8 T: d) V0 p
// time step. The action is executed at time 0 relative to
# c0 c9 C# d# g) `6 z- B8 X" f- z // the beginning of the loop.
3 B8 [1 b: w1 z& @5 \ w/ M4 b+ g0 x! y+ g1 a q
// This is a simple schedule, with only one action that is3 W+ W* f7 T" w6 ^
// just repeated every time. See jmousetrap for more
9 p* ~, o, }; O, x // complicated schedules./ b% P& a: s6 G, P. u, s0 F& c+ A
3 C B) a7 [: N/ v3 s
modelSchedule = new ScheduleImpl (getZone (), 1);
% e/ z0 Z0 a' }: u modelSchedule.at$createAction (0, modelActions);
# F6 t$ y* L) {! C) h ! k6 o! H# v) d8 d& D
return this;
0 H3 C$ I) h7 o% L& o, l } |