HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ i+ B5 V+ b# l
' B: h- X1 w' ]! f) I public Object buildActions () {% I3 E. s U! z/ P" f) p: F5 C
super.buildActions();; J( G7 ]( x$ j/ E+ w1 q
|% ?) S2 i8 c- I* G // Create the list of simulation actions. We put these in
o; T3 U6 W3 t3 j // an action group, because we want these actions to be0 v2 T# F$ w" V0 _" p) u" ^/ z
// executed in a specific order, but these steps should
6 T8 A, c/ x7 N" k // take no (simulated) time. The M(foo) means "The message7 l" W& P/ `- {# C8 t9 {
// called <foo>". You can send a message To a particular
5 l' ]$ g! A+ Q3 `- O/ t2 _ // object, or ForEach object in a collection. u, e. U9 t3 c: J* T& x0 V1 U' Y
( V7 Y! Q* [4 c" h8 n9 H6 \ // Note we update the heatspace in two phases: first run4 q* F% N+ a) P: N7 ^
// diffusion, then run "updateWorld" to actually enact the, Q4 n* X' h; K/ }
// changes the heatbugs have made. The ordering here is& J: _2 c( \2 {
// significant!( K% X8 c1 E: n# z' B( j
. F) B; x( Q; T0 O) N( S. a
// Note also, that with the additional5 ^# a% K* \& g# O0 A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 S" ?/ [% {3 q // randomize the order in which the bugs actually run" W) B& [2 m R# u3 K; v+ e; w1 V
// their step rule. This has the effect of removing any
; M. f3 t' l |1 J' G // systematic bias in the iteration throught the heatbug* f/ h. v8 {! D* T: B8 b s& P
// list from timestep to timestep
, B" k" c" q+ |' o8 G
6 b7 T) ~+ ^1 a& g) i // By default, all `createActionForEach' modelActions have4 b% M2 o! [' `2 v( E
// a default order of `Sequential', which means that the0 y! c6 N( z/ V/ M* L
// order of iteration through the `heatbugList' will be/ Z3 j5 I- N& m' T/ _8 b; e5 K1 t
// identical (assuming the list order is not changed2 e. E' {/ W2 {' K2 W6 @1 U- o
// indirectly by some other process).
, z4 i) Q- U; } ( k+ {+ @# H* u0 u9 N$ Z
modelActions = new ActionGroupImpl (getZone ());: N" C& t9 ~' A
* ~$ i0 V/ ?7 i' C' ~" w9 ~- `9 t$ y. { try {
, K) h' q1 r! b7 j$ F3 ]$ e modelActions.createActionTo$message* e# d' w3 f" X: t' \' K/ ?$ e
(heat, new Selector (heat.getClass (), "stepRule", false));
) i* X+ {% c8 @6 X } catch (Exception e) {
& x; d" Y5 W8 n3 p System.err.println ("Exception stepRule: " + e.getMessage ());
: F- x; [7 D! a! g) d# h5 y" W }2 p$ @" H/ C7 o# k
( D, B0 L/ b; k# T; n- c' W5 g E4 S try {2 o5 F H: t- K
Heatbug proto = (Heatbug) heatbugList.get (0);9 `; _$ Y2 Q( f6 g" d
Selector sel =
5 E1 k" r. d8 e3 C4 R, k new Selector (proto.getClass (), "heatbugStep", false);2 N! Y# Y, u- h7 ^" Q
actionForEach =
4 S; E$ C5 N1 |4 S modelActions.createFActionForEachHomogeneous$call5 H$ F) p+ I4 Y5 v+ L
(heatbugList," ?8 W& _! {8 p/ r
new FCallImpl (this, proto, sel,
# }- ~5 q2 `( v! y' J, g. r' \7 ? new FArgumentsImpl (this, sel)));% F3 `" C) [& q4 e! ]- d
} catch (Exception e) {2 U: Y' ^- M$ G6 u+ Y' |
e.printStackTrace (System.err);
" [$ d- z/ L3 v {! ? }5 J- k# G6 w" w3 D
0 O+ r% n- f d syncUpdateOrder ();( F% v/ Y* X& O, D4 g% L5 z
. h' u9 ]- P% x' H
try { r+ E+ |/ q. E) u5 T
modelActions.createActionTo$message 1 p% ]) [- @4 x0 f6 U
(heat, new Selector (heat.getClass (), "updateLattice", false));$ ? J: v+ |# V Y [! D' o
} catch (Exception e) {5 F% z9 B+ D4 s8 Q' a
System.err.println("Exception updateLattice: " + e.getMessage ());
5 R7 s& \6 {1 o, b0 y4 `8 R }, i- A4 X9 [2 [2 u/ e* h
; Y3 M+ V! ?' D3 x& b; b7 f
// Then we create a schedule that executes the
4 R6 H9 c& r9 j0 h% } // modelActions. modelActions is an ActionGroup, by itself it. [+ O: S; v5 \
// has no notion of time. In order to have it executed in
1 T% D+ ]3 w( O% f$ \9 c, e) c // time, we create a Schedule that says to use the
- l: B9 u" i" h& E/ T // modelActions ActionGroup at particular times. This
3 L. e7 n, n7 M! Z g // schedule has a repeat interval of 1, it will loop every
+ K$ u$ I6 j+ Y- a3 Z+ m2 |7 E. X // time step. The action is executed at time 0 relative to7 A, h6 p! x( e* P# F7 G0 v3 K
// the beginning of the loop.' i4 C2 D/ l. i5 p
* _4 l$ B. k. p8 S- _
// This is a simple schedule, with only one action that is& Y; e: r8 d" J0 i/ L7 _
// just repeated every time. See jmousetrap for more" r3 }2 m7 u7 m/ m9 |8 h [, A
// complicated schedules.$ |1 Q3 z* V1 r* a [
% J, p- ~0 D) U- K9 b. A0 d7 y modelSchedule = new ScheduleImpl (getZone (), 1);, }7 W9 l) U' P, O4 f, f
modelSchedule.at$createAction (0, modelActions);
! v/ h9 Z3 W0 Q& s$ W D& l
% s+ b3 ]% \( w: S6 Z return this;9 m+ A+ q/ }/ ]: G
} |