HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 b& `4 t5 r! P: S+ E4 ^; W0 `. }) g1 N
public Object buildActions () {6 E Q3 }; t; F9 s0 @$ U0 q
super.buildActions();
4 n+ }" K8 j/ E7 j
2 u( V1 V7 g" J$ B // Create the list of simulation actions. We put these in# U7 q3 t9 J# q) G1 r1 x- X
// an action group, because we want these actions to be
6 L; ^" n) P$ I! @! J u# y. D, g // executed in a specific order, but these steps should
( h, z$ @; `% y# s" h2 |, @9 _3 l // take no (simulated) time. The M(foo) means "The message& |4 |, H+ N- M7 h; d9 R1 i" x
// called <foo>". You can send a message To a particular# } A8 V u* g! q' a, q0 b
// object, or ForEach object in a collection.
8 V, l9 p$ v0 `2 V / {' S; y0 Y6 w
// Note we update the heatspace in two phases: first run
! U% _ |& |* p# O0 F+ Z // diffusion, then run "updateWorld" to actually enact the
0 F5 K2 ]- u$ B6 I1 b% n% ~$ h3 I // changes the heatbugs have made. The ordering here is- Q! ?- M" @+ G8 H7 c; t! J
// significant!
4 Y1 V* x. b' B0 D- B8 o( i& w' W" {5 ? F6 _6 H1 n) q0 v9 ?
// Note also, that with the additional# k! J* O6 U2 m5 j! O# l" x4 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 b5 L! T; a3 ]" b: K: M% n! }; c // randomize the order in which the bugs actually run1 e# C7 M: k: r7 C" c
// their step rule. This has the effect of removing any, g7 U; l* ]% {& L3 t/ B+ K8 X; H
// systematic bias in the iteration throught the heatbug, q. ^( B# r9 g. f
// list from timestep to timestep
$ _& x1 N5 V# ]" U( M X! ~2 i0 R' Y9 E- l. ]- z5 S
// By default, all `createActionForEach' modelActions have
! Q& ~1 B3 K2 Z. w // a default order of `Sequential', which means that the
1 @" K1 i7 [; K- t6 D! {; i. p // order of iteration through the `heatbugList' will be
% v' u5 ~) i4 ]. |& h8 u // identical (assuming the list order is not changed( {6 h1 u/ l1 S" t5 t& s; R
// indirectly by some other process).
" Z) m8 s( O, R, w 9 F8 Y2 \* }8 V6 n) S
modelActions = new ActionGroupImpl (getZone ());
7 i% E- k5 o' k( q: B9 f+ Q
7 m7 {! h) p) w1 z- h try {" @3 D+ K8 a/ b# W5 m, T, ~& W
modelActions.createActionTo$message
, t- J" q, W' p (heat, new Selector (heat.getClass (), "stepRule", false));
- x" q0 Q6 F: A- q) Q6 _9 f/ h } catch (Exception e) {
. @! h8 x( {, Y1 l+ v; f9 A System.err.println ("Exception stepRule: " + e.getMessage ());
+ H6 Z, ?/ m, D; M }/ o- [& V7 |7 D: I
- o. u9 ~+ F1 @# P1 S- O try {
% u! Y H. n5 m, _* @( D& h Heatbug proto = (Heatbug) heatbugList.get (0);5 k2 b @) l# ?5 K: N8 n7 |! V
Selector sel =
6 c e9 S5 B0 b$ n5 [: w! O new Selector (proto.getClass (), "heatbugStep", false);8 ?, P2 t$ S2 e" `5 s4 d6 x
actionForEach =# \$ v7 l; p |9 L! k2 L
modelActions.createFActionForEachHomogeneous$call
9 q5 ^" e5 T/ ?; ^/ r, L! U (heatbugList,* |3 _! m1 j$ f# M- D2 h5 v
new FCallImpl (this, proto, sel,
( x! Q8 Z/ ?* G1 i$ x6 W& Z9 i new FArgumentsImpl (this, sel)));8 G8 P- t( S7 T; T' \7 r
} catch (Exception e) {/ k3 P" x! [) }$ k- ]2 N
e.printStackTrace (System.err);
8 B7 e. A" i2 {* b( d1 H }/ A3 G' ~' A; ]) x! {
( i$ m' C* M( v6 A, A- B4 g+ P% b: A2 y syncUpdateOrder ();) o, L# E9 p: O
. z3 n9 M* \4 F, {1 E' e% f try {
! I! f8 w% X% [! B modelActions.createActionTo$message v3 l1 t$ j5 _* R
(heat, new Selector (heat.getClass (), "updateLattice", false));7 @1 Z# L4 j2 l" \5 ]
} catch (Exception e) {' ]; K2 B [% u- ?# o3 t# ^
System.err.println("Exception updateLattice: " + e.getMessage ());
- L- k0 \2 j3 h3 w$ }$ n }
0 A" N, N0 x. k& e6 a8 g & W4 m1 e1 a, w! T: a7 v, }
// Then we create a schedule that executes the
$ L$ B6 m6 ]/ E P1 R3 \" p // modelActions. modelActions is an ActionGroup, by itself it
L. j% V D* p8 d$ k H // has no notion of time. In order to have it executed in: {( w( L2 C- n% h
// time, we create a Schedule that says to use the; N P# K8 g1 `1 H! f
// modelActions ActionGroup at particular times. This
9 ~0 x9 E' x# v F1 W/ c // schedule has a repeat interval of 1, it will loop every+ b" ] @8 ]' G$ o# B" A9 v
// time step. The action is executed at time 0 relative to
9 m, G. d [! \/ B0 s // the beginning of the loop.# l( o5 h+ n* S' Q) A
- r0 \( D2 t) Q1 w) l9 ~
// This is a simple schedule, with only one action that is6 k) x# T- ` C( W6 [. a
// just repeated every time. See jmousetrap for more% R. I' v( U2 D( Q7 G7 J
// complicated schedules.
3 x, _0 [1 ^2 Y: }8 k" b8 b% A
2 u5 |; r4 N- A: N2 x6 ^ modelSchedule = new ScheduleImpl (getZone (), 1);. c7 v( i( L3 Z% s$ y& G
modelSchedule.at$createAction (0, modelActions);
0 P$ D5 F( A# R, }# O9 r/ }" Z/ d
+ ?& \; k, X) T$ Z: a' g5 O7 E return this;6 o; x& ^; ~2 D
} |