HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* l. V6 r' H7 O! o5 m) L) A$ a' L+ w
public Object buildActions () {, S- C9 s8 Y' e
super.buildActions();2 }9 P ~* ?- l! n* v
+ Q# P" m& n3 e/ z* e7 e
// Create the list of simulation actions. We put these in
! }/ X! T3 |# P. {1 o8 ]5 t' s // an action group, because we want these actions to be
; ?# n! w: v( g0 e! {& j5 H // executed in a specific order, but these steps should& J, r# m% b$ I3 k, Q3 H( e
// take no (simulated) time. The M(foo) means "The message) e$ `4 B1 t2 M- Z
// called <foo>". You can send a message To a particular
) j7 f/ J) {" |0 g% M- E // object, or ForEach object in a collection.1 y! t& ~ R5 S# I5 ?
! Y$ O/ X/ f3 y0 ?8 y
// Note we update the heatspace in two phases: first run; u8 z7 u! \3 d Z9 U
// diffusion, then run "updateWorld" to actually enact the
- l' y0 Q* e! f2 z( ~ // changes the heatbugs have made. The ordering here is) J. ~8 Y6 p' Y) T' I( A
// significant!
* q. a e8 _9 \ * W7 a- c: J+ m* s1 G x
// Note also, that with the additional
2 r* z# l# ^, W: q0 c5 b4 }- | // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 d+ \6 [' x! W* I# d6 k7 }8 m // randomize the order in which the bugs actually run
7 N! b% L' @+ K8 W5 @+ v // their step rule. This has the effect of removing any
( [; F- C$ J1 n1 k" M4 Y // systematic bias in the iteration throught the heatbug
/ \* `( R& Q3 A% g& m: `/ F; g, f // list from timestep to timestep
/ _5 E' a: D1 L
: n( ?6 @( ]( U! H // By default, all `createActionForEach' modelActions have
% j( B- ?& Z- v9 o L/ f" V // a default order of `Sequential', which means that the
) R% m9 U% W# P# g // order of iteration through the `heatbugList' will be
2 a( t" H' e! c2 V // identical (assuming the list order is not changed0 R* W0 N4 X; t# @1 r5 }% f! [. ?
// indirectly by some other process).7 U+ U9 X0 b$ g5 N2 ~6 _6 }6 |
# \! I6 v' o8 q6 n+ V( w4 ]4 A modelActions = new ActionGroupImpl (getZone ());) m6 ?" w- ^8 h8 Q& u" X+ Y
) E9 E+ P$ f# n+ ?- k
try {
/ S. r5 L: C% y \ P( C modelActions.createActionTo$message f5 [. J! i+ }% v Y' @6 ]: k
(heat, new Selector (heat.getClass (), "stepRule", false));" n% f R6 P, d- N* S
} catch (Exception e) {4 @0 B4 E6 U( E J/ `9 m) d
System.err.println ("Exception stepRule: " + e.getMessage ());
, y8 v3 \) c* D+ G }
. K# J6 Q! R+ z0 y/ h/ H9 `) V: r) k/ F$ J+ U$ X
try {$ W7 F* F. X9 ~
Heatbug proto = (Heatbug) heatbugList.get (0);
5 h, }# L& J5 ^ Selector sel =
1 D, d3 T0 r; n0 Z) q, `4 Q new Selector (proto.getClass (), "heatbugStep", false);
) R7 o" X/ w4 \, { actionForEach =
" V( }% }0 L& l9 N modelActions.createFActionForEachHomogeneous$call' l8 H! @- S" H
(heatbugList,
2 o8 @4 _. X7 J( i. t" X7 H new FCallImpl (this, proto, sel,
& f( P. c/ I& j$ W& h- D new FArgumentsImpl (this, sel)));
" I ^4 _4 P# @# c/ d- \ } catch (Exception e) {
% a- X/ Y- Q3 {+ c9 ~ e.printStackTrace (System.err);
! _* T8 a2 \1 R9 B& N4 Y }- V. a3 e0 n8 Z4 L/ i0 i& G# u' ~
V6 [" N% D& p7 H5 |6 w5 l syncUpdateOrder ();6 b ?! W, Q7 O, y) r. k7 P7 S# k
; g; H4 g+ ~5 h$ d+ D. ^$ [ try {
, b" \% R" ^; p- t& R# i, o8 ~/ ^ modelActions.createActionTo$message ' T! d; |' G( [/ c2 T7 J, w
(heat, new Selector (heat.getClass (), "updateLattice", false));$ p+ o' M9 b5 e5 h! H
} catch (Exception e) {
' q* l( ^% \* S5 }- _ System.err.println("Exception updateLattice: " + e.getMessage ());
8 v/ x- h1 B/ T9 m }
! ]. D6 s8 H5 Q; J
- q% R8 A8 |* d ~ // Then we create a schedule that executes the6 H" F( ?1 Z6 G$ a2 Z
// modelActions. modelActions is an ActionGroup, by itself it
* {! a$ U" [* ^* q5 h8 w // has no notion of time. In order to have it executed in
* Y1 P! l$ W; t i9 g+ { // time, we create a Schedule that says to use the6 `, d$ c7 W+ U+ i' a
// modelActions ActionGroup at particular times. This; s# k) l2 m0 e- C2 s
// schedule has a repeat interval of 1, it will loop every5 m; n$ S0 @' K# X* B6 e( y% i
// time step. The action is executed at time 0 relative to
# T9 Q1 V' C1 h' [/ ] // the beginning of the loop.
t! V. F+ e( H, T3 y$ j: V7 O" `2 l8 z7 W4 ]
// This is a simple schedule, with only one action that is0 R2 d# T1 C5 `- @3 q
// just repeated every time. See jmousetrap for more' d. P4 E- G( ^1 S* P% i3 C
// complicated schedules.
' e* R) g/ O" E0 _- L/ f - z+ w' s, V* J' }5 r
modelSchedule = new ScheduleImpl (getZone (), 1);
c0 |# l% D) C2 R% ? modelSchedule.at$createAction (0, modelActions);; V6 g3 u* y$ m+ ]- `/ ?
9 }1 m, ]$ p' a. C3 c return this;, c$ o6 E6 M8 v/ S$ }+ K7 B: Q( m
} |