HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ D7 a% t+ K- g1 i7 n
3 U( g- C" A7 M# @) d public Object buildActions () {
& z9 G; n5 `" f super.buildActions();
3 j& M6 X" i5 i: [1 a * |% h5 [( q$ \( Y/ H- e$ P
// Create the list of simulation actions. We put these in
$ ]: A8 x' W: }% z // an action group, because we want these actions to be
% p+ l/ k, H! \ // executed in a specific order, but these steps should+ D/ I3 F9 n% ?. W1 j) q1 ~
// take no (simulated) time. The M(foo) means "The message
" ]; X! f6 l$ i B8 { v5 _ // called <foo>". You can send a message To a particular
7 O( V7 ^0 E# j; E5 V7 T! k // object, or ForEach object in a collection.
$ @ |; c& ~, F+ o1 |1 y6 y
: l6 k' x, v! {/ |% ^9 m8 r" j // Note we update the heatspace in two phases: first run
/ c+ z; |( J G+ |5 ]' B3 [ // diffusion, then run "updateWorld" to actually enact the
1 D5 g" F) ?+ D3 E- @2 n! d // changes the heatbugs have made. The ordering here is( c' M0 G- e E9 ]
// significant!/ J J3 ^5 ?6 F# E( q+ ~
1 k- F; D$ t: O9 C5 v) g! b) T // Note also, that with the additional* ]- \8 s$ f; j" z. u
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% Z+ y; f9 b9 _% \( I+ F9 j$ W // randomize the order in which the bugs actually run
5 I; g7 y; G7 X1 \) Z; Z/ Y( a // their step rule. This has the effect of removing any: \3 N I1 G( V: U
// systematic bias in the iteration throught the heatbug! a+ Y! d C3 \7 H
// list from timestep to timestep$ f$ h3 P9 ?* E: i
7 \ n. E( y3 M+ C; U3 ~; R
// By default, all `createActionForEach' modelActions have; \! q! f4 I: { o' |, ?
// a default order of `Sequential', which means that the
% K* F6 \: T6 D5 n* Q. H# g // order of iteration through the `heatbugList' will be8 S# _0 ]- Y0 T( u
// identical (assuming the list order is not changed! ]* p5 `1 c, o& r* v
// indirectly by some other process).
# c! ?6 T) e/ l! R w: y2 [
: \+ z4 N& ?0 P3 a' V; g8 E modelActions = new ActionGroupImpl (getZone ());
$ `3 V5 A$ E. V' c4 ]
4 g0 @% Q* F6 h/ k$ ` try {, \) `0 X) f" \( G& O
modelActions.createActionTo$message' v% E$ g/ C8 r8 b q# q
(heat, new Selector (heat.getClass (), "stepRule", false));
' n# k/ w4 ^- M/ Y! Y% W5 v } catch (Exception e) {6 T7 o- p4 F" f' I; W# c
System.err.println ("Exception stepRule: " + e.getMessage ());% r: F# R& N0 _, P7 t z3 q
}
- _) L) Q4 R3 a9 V K" C4 f( \: M6 |9 z
try {
8 U+ A- t' e2 N4 s0 w: a1 v Heatbug proto = (Heatbug) heatbugList.get (0);
% A* g$ ]. b# f( W Selector sel =
2 p% f7 w6 \3 o, u: X. u- B5 f new Selector (proto.getClass (), "heatbugStep", false);
% m# H& o2 X: @/ a i8 A actionForEach =
# D ~# d7 f, v: J/ h modelActions.createFActionForEachHomogeneous$call. S6 f) @5 s: U9 K) V' @% G
(heatbugList,
8 x4 l1 z" e n$ K new FCallImpl (this, proto, sel,
, E0 e/ p' C8 O! W new FArgumentsImpl (this, sel)));0 @$ U n' E5 f4 c) |8 w
} catch (Exception e) {. K, e! @- D4 H: f) b2 G, J- S
e.printStackTrace (System.err);6 D f; Z8 E# i- w8 Q" |8 q
}2 t' C4 I+ V1 ]+ q2 O
7 U9 i2 O, y( i: k
syncUpdateOrder ();$ ^: V7 h$ T* t( A% a- l4 y: n
5 P" l. O7 K2 y0 Q1 Y try {
9 T: V, e$ P$ T0 ~6 ^ modelActions.createActionTo$message , J. Q! ^ Q# x
(heat, new Selector (heat.getClass (), "updateLattice", false));
) d C) ^4 r: Y8 Z( R# F0 X% k } catch (Exception e) {
! J3 |# \7 e: z System.err.println("Exception updateLattice: " + e.getMessage ());
7 s ?2 w: d3 P; f }; v4 u3 [& z0 S' F) G3 R+ \* y
: b" b; P" U; K
// Then we create a schedule that executes the) r; }/ O% `1 @# Y$ q# v: s7 U
// modelActions. modelActions is an ActionGroup, by itself it
. \. k: F/ i3 o // has no notion of time. In order to have it executed in
" p3 f/ f3 U/ t P& `/ m' ? k) | // time, we create a Schedule that says to use the& [: {; u. o5 N) ^3 y3 e5 o
// modelActions ActionGroup at particular times. This
4 r- S7 d& R1 x, h // schedule has a repeat interval of 1, it will loop every
6 w+ I- U. V- `2 r% o // time step. The action is executed at time 0 relative to$ l1 \/ U1 i8 A9 f, @
// the beginning of the loop.# l2 \6 r0 ^# A) v3 R
" A9 L0 R& Q- O! l // This is a simple schedule, with only one action that is
6 z9 b1 l1 T! L2 C: A! |8 ] // just repeated every time. See jmousetrap for more
% c9 {8 o5 {( v$ n* N // complicated schedules.$ |* Y3 u0 Z: R
. _& h' ]) Z9 z& D* ]+ @& R1 l modelSchedule = new ScheduleImpl (getZone (), 1);5 x4 z9 J. V1 `; L+ v4 ~
modelSchedule.at$createAction (0, modelActions);
) V* C, _3 ]1 s$ P* p- C
) f1 o. K% |4 T; o6 u return this;$ \5 A9 b2 ?/ }" ] R3 t3 k! f8 w
} |