HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 l9 H6 x: ^% a: R# e) c: T! J8 @' p+ T) {
public Object buildActions () {' X* ]1 S8 c* T0 j5 @
super.buildActions();
4 m; D" @; d6 ], `3 r# Z. w1 ? ) i! }; M+ J$ l/ D1 |2 F T% c9 G
// Create the list of simulation actions. We put these in
+ D4 Q& @4 p6 P! k; s; K l, l // an action group, because we want these actions to be# X; P; R% S& P
// executed in a specific order, but these steps should
) m# i1 L- o& g! D$ }$ A( W7 G* _7 O7 l y // take no (simulated) time. The M(foo) means "The message
% @/ F# S; n0 m! F) B // called <foo>". You can send a message To a particular
5 J. ^" l( ^7 R$ B& m ^- M // object, or ForEach object in a collection.
/ _- s4 m Z$ ]0 A 3 P; q: G3 i; j s/ i Z% P8 I0 L& H
// Note we update the heatspace in two phases: first run/ \ O5 o7 O) _
// diffusion, then run "updateWorld" to actually enact the& v+ T+ U' b' k) r+ A4 S( i* s: j
// changes the heatbugs have made. The ordering here is
$ a. Y1 Y2 v6 B( x) \3 s! a // significant!
# ^9 A# D8 `& P/ v( B- @ + ^3 M& [6 k' J( Z) `
// Note also, that with the additional
, g# H9 T3 [; p( N5 S+ u // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 i) D. n( }: o, [ // randomize the order in which the bugs actually run
% n8 D- B$ }2 |7 X& r // their step rule. This has the effect of removing any0 u8 ]; f* r- v6 {' k# B; ?
// systematic bias in the iteration throught the heatbug
1 Q1 N! s0 p7 Q$ B7 r8 u$ q. ? // list from timestep to timestep, H3 n0 D! c2 s" a
; G4 {: I9 W7 A
// By default, all `createActionForEach' modelActions have3 [' D2 a; S0 d0 X* R5 g! H
// a default order of `Sequential', which means that the
9 I$ J/ @8 d. k // order of iteration through the `heatbugList' will be
! G- J' `+ j: r D0 V. h$ | // identical (assuming the list order is not changed$ u+ s; I+ }& t5 m
// indirectly by some other process).9 s5 }/ f4 n/ a5 g
7 h) e3 b* J7 e
modelActions = new ActionGroupImpl (getZone ());8 {; a6 l( ], H
1 {) Q7 K' U' ~7 n; W try {5 G) [3 V' `0 k A; `9 T
modelActions.createActionTo$message
" Q3 J9 Z3 z6 c (heat, new Selector (heat.getClass (), "stepRule", false));4 m# h4 ]: C$ F# `9 V
} catch (Exception e) {3 N8 X0 u; _& W4 J
System.err.println ("Exception stepRule: " + e.getMessage ());# Z& S# e6 v$ V: w: K
}" x# j0 ~6 V0 b% H
! p2 k" s+ s5 L+ M. N
try {
5 M# f( g( d; p+ H. V | Heatbug proto = (Heatbug) heatbugList.get (0);2 d' L* [! W- E
Selector sel = % ^2 m% R/ l+ }' u9 A! ]
new Selector (proto.getClass (), "heatbugStep", false);& J$ D/ R, p% Z" U* Q3 j
actionForEach =$ S) M0 c) j3 _* l
modelActions.createFActionForEachHomogeneous$call1 Y1 c7 r. l" C* P: i
(heatbugList,
, u% `7 ]3 q6 g+ x5 ^% F new FCallImpl (this, proto, sel,
/ q- ^. B- |9 }; ^9 C2 Z u' h2 Z new FArgumentsImpl (this, sel)));
1 Q+ ^4 P: j$ s' c4 O. w) N+ |% { } catch (Exception e) {
. Y, K" J' u* C e.printStackTrace (System.err);
# Z7 Z; h, ^1 o2 E. N+ \5 [8 k }
5 {$ ]) W7 M& i9 P ' X' O- D+ S0 o
syncUpdateOrder ();' j8 E+ D) [5 p! z3 f( T& Q
" m: ]$ e/ N, L# D
try {
0 B) }. i6 U* O8 w2 V8 O p modelActions.createActionTo$message 0 }! w5 k- z- }, O- ]3 E
(heat, new Selector (heat.getClass (), "updateLattice", false));
; f9 K* f, m9 e7 S2 [& L: y( M } catch (Exception e) {
) b; U2 }. X& r1 \ System.err.println("Exception updateLattice: " + e.getMessage ());5 `" b' {) b( ~' J( @. S
}! A- `$ C4 |" A* f7 u7 J) @
6 H0 X- e- ?) G4 y: y" w7 [
// Then we create a schedule that executes the+ k; S7 g+ L9 m0 `$ B* d# q$ Q- I
// modelActions. modelActions is an ActionGroup, by itself it3 o$ H* [6 f, w! F8 Z! h2 \- k
// has no notion of time. In order to have it executed in
/ k% S. L2 c0 Z* R" N0 s9 x // time, we create a Schedule that says to use the
* s. f) a: p2 s$ u1 d, s: I A8 h // modelActions ActionGroup at particular times. This
; V! Q2 A( F2 s; b( J1 q6 c // schedule has a repeat interval of 1, it will loop every$ }1 z i! ~3 R& l6 G
// time step. The action is executed at time 0 relative to5 e2 r: M3 w1 L; J/ `) K- p' @
// the beginning of the loop.2 y/ W4 \1 V. q
Y: Q( W9 V' Q- F! S4 ^/ \ // This is a simple schedule, with only one action that is
( j5 l; n2 _, k. F! z# ~2 M. O) a // just repeated every time. See jmousetrap for more
7 H( ]( f( C+ A K6 C! q // complicated schedules.' b( R! C4 T+ l; S% r, ]# s8 N
u3 w5 K6 O+ L( t- f: h: g
modelSchedule = new ScheduleImpl (getZone (), 1);
% b; j- a7 @, Q# x9 S. y; L+ j modelSchedule.at$createAction (0, modelActions);0 B& k3 h1 N7 w3 i+ ]) ~" Z
# F2 u0 R- ]7 m u( P1 u3 {
return this;
; r$ ^0 ] E& Z8 { } |