HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 a6 q2 B7 z, e( U0 W& Q
; R5 o# N9 h2 X public Object buildActions () {
7 \" t( Q% v# i; H6 | super.buildActions();
& I$ V- f: D2 `* [- P
% v% O @' v% ^$ X% S // Create the list of simulation actions. We put these in
) a* |1 d! t3 e // an action group, because we want these actions to be
/ r0 L q0 R# ~# U7 E1 y // executed in a specific order, but these steps should s* d6 J) t; A
// take no (simulated) time. The M(foo) means "The message5 n3 s+ x# q- ?0 H" v
// called <foo>". You can send a message To a particular V' f( S0 _; c4 j# V/ \2 v# L$ s; ?
// object, or ForEach object in a collection.
& y, @, j+ n4 R/ N* e0 n
1 n0 D3 t9 n1 I& ^( k6 V // Note we update the heatspace in two phases: first run
1 n( a& g1 T/ o, D) X1 @7 H4 d- s // diffusion, then run "updateWorld" to actually enact the
$ Z, ~! w2 b4 y+ e: r // changes the heatbugs have made. The ordering here is) I' Q% V% S+ P6 S$ B6 e
// significant!. S T' W* |0 y
8 J7 N7 n3 c- k) B$ c! X; B7 p
// Note also, that with the additional0 ^* _$ b0 ~# _ u7 B4 O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 E; G/ N: a6 [ // randomize the order in which the bugs actually run
% r4 a# H$ }3 B$ n1 x9 m3 G // their step rule. This has the effect of removing any% p) e5 M9 L7 h! `
// systematic bias in the iteration throught the heatbug
6 j: H2 ~& ~" F3 e/ X // list from timestep to timestep
2 R! b, j) i& E- x0 Y. F9 Z$ { ' r. h$ I- ?2 P
// By default, all `createActionForEach' modelActions have
. r& g: s! ~, H3 i. I# O // a default order of `Sequential', which means that the7 h0 j4 @; r8 f2 s% j O2 }# {) f
// order of iteration through the `heatbugList' will be
- J7 l% J* ~ y: ^- ~/ I // identical (assuming the list order is not changed
) I/ @3 N# ~/ h: W+ F // indirectly by some other process)., [1 b5 f$ {! g
* ]7 F) W6 A. h- t4 d2 y7 U modelActions = new ActionGroupImpl (getZone ());
1 P# J; [5 l; x7 n7 f3 ?/ \/ U/ f) V- e+ A9 d! z% s
try {, ] n9 o6 x- {" B; M/ R. t& Q" ^
modelActions.createActionTo$message, D) W2 a% y7 H0 W6 L; G
(heat, new Selector (heat.getClass (), "stepRule", false));
! H1 ~( d1 U" s) H# [ } catch (Exception e) {
. f1 g0 a: E5 P* V5 ]# q System.err.println ("Exception stepRule: " + e.getMessage ());3 L( F- I: O, L+ w% | P
}" ^/ m0 Q9 T3 z$ C: Q
. w5 ` f3 R6 Y' i2 @
try {. f; I1 L$ f# U
Heatbug proto = (Heatbug) heatbugList.get (0);
" q1 M6 x- ?1 c8 R Selector sel = $ m' W u. r# K: O7 E
new Selector (proto.getClass (), "heatbugStep", false);
$ j/ a4 ?2 ^$ J8 \ actionForEach =& T( w+ B% d% J/ ^: G& m1 \
modelActions.createFActionForEachHomogeneous$call5 `- Z1 m5 F/ P7 a- Q3 ~
(heatbugList,
. x! q, [! I4 s: Q* l new FCallImpl (this, proto, sel,
7 g/ R, n( K9 e new FArgumentsImpl (this, sel)));' ^; B$ S2 S4 r. g4 K2 k; v. t
} catch (Exception e) {
6 y, A+ ?& ]$ i( t6 G: l0 v1 L: Y e.printStackTrace (System.err);
6 t; t" s& T6 b0 |5 [$ \$ t8 _! M$ E }# Z* [' X: F4 o# L- d
% B. C! q2 ]; v
syncUpdateOrder ();+ N/ f+ |& h! j+ X5 \6 a) f
# S2 ~0 X' X% c8 y& i
try {
. c! d; w, O* m: f+ p1 A7 ` modelActions.createActionTo$message & D' s$ W# u" |7 \6 E4 }
(heat, new Selector (heat.getClass (), "updateLattice", false));) ^5 n- E. W4 e% I# c& |* N+ I
} catch (Exception e) {4 \! i: e- }. i& |0 ?
System.err.println("Exception updateLattice: " + e.getMessage ());8 U& g8 r4 d' L& v L; @
}5 T D3 d' x; _% S$ x: `: N
1 U# Q0 V: F! k" h# R // Then we create a schedule that executes the* T% Z9 G# f3 z( P- d/ w/ n
// modelActions. modelActions is an ActionGroup, by itself it9 P5 T. x9 E" Y0 K
// has no notion of time. In order to have it executed in
) _/ Y0 J4 y( ?7 I/ h9 t/ \4 V // time, we create a Schedule that says to use the
) y; X7 }( L+ A // modelActions ActionGroup at particular times. This
; S7 S* j9 `) {) {. Z9 I9 M // schedule has a repeat interval of 1, it will loop every
+ K1 \# W* ^ m( y // time step. The action is executed at time 0 relative to% g* n# \- l. B8 Z. x# y- ~1 ]
// the beginning of the loop.2 d4 f! k2 m$ u. T* g& ]! _
. ~/ Y, _+ s, ?) N1 k U
// This is a simple schedule, with only one action that is
: ]2 K+ A$ z6 K) I5 R$ e // just repeated every time. See jmousetrap for more
4 t: `1 R Y% g( X // complicated schedules.3 U* O1 h/ o _3 D! r* O, F C
% T5 b5 l( O2 o0 [7 O
modelSchedule = new ScheduleImpl (getZone (), 1); O. G a# h" B
modelSchedule.at$createAction (0, modelActions);
% o2 L5 ?3 r, g2 \2 S0 f" H% m& { 1 |' a7 K6 v# Y1 G8 ]. G
return this;1 i- Y1 [4 o5 d/ d, r, E
} |