HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; K- \* S7 o0 K; F4 ]8 i- r, S$ V- \
public Object buildActions () {" [$ u: Y1 u# ~; _% p5 k9 r' r* }
super.buildActions();
n# x5 `8 E! \- o9 q! y& V9 p
8 } s: _- F( S% T' y3 i // Create the list of simulation actions. We put these in
' V- o' I8 X# @: z' Y: g9 ? // an action group, because we want these actions to be2 d* Y% W+ w6 G& S x
// executed in a specific order, but these steps should
5 N, P! p1 h9 H- r2 ^* k9 F // take no (simulated) time. The M(foo) means "The message
# V, G8 i! ?. O4 m // called <foo>". You can send a message To a particular- s$ Q4 w/ H' T _
// object, or ForEach object in a collection.
0 }# Z) A& h/ y9 G! E 5 j1 @/ f, W# k; z4 L
// Note we update the heatspace in two phases: first run
3 r! w5 s* h1 O* O3 M6 H // diffusion, then run "updateWorld" to actually enact the
, [5 u2 o/ N* S/ ` // changes the heatbugs have made. The ordering here is8 D; i- \- F9 M! m6 V! K
// significant!. ^" m) B, ~ r% h! }3 {
% ~/ l A5 j# p* C# \' Q // Note also, that with the additional
* w# h( U! r3 Z, [ // `randomizeHeatbugUpdateOrder' Boolean flag we can4 k# u- s5 r+ \& w& s
// randomize the order in which the bugs actually run
( f8 S/ U' Y( f1 X" ?! W$ l; k) |, a( ] // their step rule. This has the effect of removing any- ^ d* q) S7 Z8 {# Z$ m* H9 v
// systematic bias in the iteration throught the heatbug- @4 x! A5 t! R T# P' |! D
// list from timestep to timestep
2 d# j t7 E" a) x% f0 Y. t
7 e. w/ a% F/ _& L3 f$ w // By default, all `createActionForEach' modelActions have9 J1 c& ~7 b8 k: W: Q
// a default order of `Sequential', which means that the
* ~! N* W- b5 S% S# ?' [ // order of iteration through the `heatbugList' will be
, j( i3 W+ D' Y7 n, E' B3 A$ ~' `# w // identical (assuming the list order is not changed
3 x f) S" S) e // indirectly by some other process).1 u- r: e9 Z4 f7 {3 l9 ]; b
% t! g1 ~0 h$ F! q7 B modelActions = new ActionGroupImpl (getZone ());
3 e. F6 m$ E8 J! y, [' | v5 g. B' t( x
try {5 I) P7 ?. v$ t- Z8 i) y
modelActions.createActionTo$message
" `1 T6 b' X- J7 {* y (heat, new Selector (heat.getClass (), "stepRule", false));
0 s2 A5 O F- t) b$ h4 o5 s } catch (Exception e) {
" O& L- r- @0 u* B+ M7 F System.err.println ("Exception stepRule: " + e.getMessage ());: a) W, B% p0 D+ v# J# J- g h0 q
}# ?/ |% y1 ]7 p5 U+ {
6 i5 j- q' ^) c" ]. O0 {
try {
: N) g0 o- A. k" ~- i, @ Heatbug proto = (Heatbug) heatbugList.get (0);9 y+ }$ m& q5 }1 L) {* q
Selector sel = 6 c- j+ K. V0 B3 m' U6 l4 e
new Selector (proto.getClass (), "heatbugStep", false);2 V7 a! ]/ Y3 M7 D6 o4 B3 m
actionForEach =
1 O! M* A) p2 ]5 E2 n. g% n" M2 v5 F modelActions.createFActionForEachHomogeneous$call
7 k( F3 K& Z0 m4 S0 C; i; Q$ `5 J& x (heatbugList,, P g6 c) \7 \3 ~; B/ x7 f. w" p; ^
new FCallImpl (this, proto, sel,
' g l$ f( @% Y6 l3 R new FArgumentsImpl (this, sel)));
) [" V+ k. H2 p# n. ^' R } catch (Exception e) {
! ]0 _' H1 i& h- k; ]/ K* d2 E e.printStackTrace (System.err);
! A* \/ ~: }2 {8 r6 F3 A$ s }9 u0 X. [8 l( i. ?, z
. C* }9 u" e4 u
syncUpdateOrder ();
+ ]9 P2 z+ C) s5 Z) _+ ~6 v0 C& e7 `) y/ x+ U( C1 t& R& Z
try {2 E& Y& P" {% S! z! W( a) i
modelActions.createActionTo$message 8 x1 X0 t0 T0 A U# D
(heat, new Selector (heat.getClass (), "updateLattice", false)); _! G3 a5 o+ }) v
} catch (Exception e) {& G$ E& A2 d* U
System.err.println("Exception updateLattice: " + e.getMessage ());
& }, K' L7 R7 T: X: ~, E9 e }
3 H5 ?; n. e! g
0 q% ?2 Z* M# S' h' y& H0 D // Then we create a schedule that executes the
6 d9 L0 d, t' d' k$ L+ n3 q$ ` // modelActions. modelActions is an ActionGroup, by itself it
% E5 |* y: h; @" L // has no notion of time. In order to have it executed in
. T! i8 j p- X% y5 }( { // time, we create a Schedule that says to use the+ O4 t$ r! _9 ` g+ B
// modelActions ActionGroup at particular times. This
4 F6 K* O+ [% J/ Y // schedule has a repeat interval of 1, it will loop every
\3 _3 }( L% A5 t- b // time step. The action is executed at time 0 relative to' b: s3 M9 t! _0 h, { R
// the beginning of the loop.( d L' h9 J$ r1 c b# A$ o! S) e# w
6 n" b1 f: \& d) {9 Y; c# q
// This is a simple schedule, with only one action that is5 }3 M% x9 w7 g" z
// just repeated every time. See jmousetrap for more r/ t5 r) U1 \8 e' s/ `1 _9 ]
// complicated schedules.6 _; w3 N) N N( E
3 K- D+ ?/ W- C! B( r modelSchedule = new ScheduleImpl (getZone (), 1);. j8 A: }" V4 Q) I6 [/ h
modelSchedule.at$createAction (0, modelActions);1 z. b- d' `' G9 v/ a
! o* C7 V4 C4 s8 c
return this;
9 t N8 _5 o& l } |