HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( s# k" _7 _) A. ~
3 U9 L. d9 Y, J/ I* ?* V
public Object buildActions () {
( m7 O% m. k3 q# }3 N, N' N9 u super.buildActions();
: |: r7 T- \0 w. w. t% ~. a 7 D! G0 {3 F$ `3 P& h- B1 I7 S. V
// Create the list of simulation actions. We put these in% A% S# J; U* S- S6 u& [- o- w
// an action group, because we want these actions to be
8 E0 A" O" m- S4 a/ D' I( l // executed in a specific order, but these steps should
0 F, r" ]. C/ p9 I+ U // take no (simulated) time. The M(foo) means "The message
" K4 b5 Q; w% g // called <foo>". You can send a message To a particular
8 A( p( ~. S$ g: h) ` // object, or ForEach object in a collection.* v* \. @! A* n" c4 Z4 i
! V3 Y, V4 b7 o) ^0 A: M // Note we update the heatspace in two phases: first run( E+ ]! C* w+ P
// diffusion, then run "updateWorld" to actually enact the! s8 B9 @# P/ H9 W
// changes the heatbugs have made. The ordering here is) N5 q- |7 _6 {" N: i; R3 e
// significant!, s9 r! m. G/ D; B* q. g# h9 A2 w
; O& D; F5 W. [* T
// Note also, that with the additional$ h7 @. x: N# ]+ E
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 |+ L/ v6 ?9 J1 L // randomize the order in which the bugs actually run
1 V6 o& a1 [& [' | // their step rule. This has the effect of removing any
5 K$ U3 e; z" c; z: l // systematic bias in the iteration throught the heatbug
% s: K& }. s8 x3 K3 B' Y // list from timestep to timestep8 M, \& c, R* l: Q R
2 R6 d; t m# R. J" {* ^9 W9 l
// By default, all `createActionForEach' modelActions have
2 E; ^' E, H1 N: } // a default order of `Sequential', which means that the8 S* p6 G' v- v# B) M4 E
// order of iteration through the `heatbugList' will be3 i# l9 v7 @0 n1 l; g) r5 R( }
// identical (assuming the list order is not changed* l& J% w' _5 s9 B3 h
// indirectly by some other process).
/ m8 U0 V: a `+ @* V) j ! L, M% n& C4 E- R% c1 @
modelActions = new ActionGroupImpl (getZone ());
2 y4 G2 n5 Y/ Z4 B* N1 X3 H3 Z# I: k6 t0 g% w8 ^2 s' U
try {
. ~0 Z7 e4 y7 g# |8 J modelActions.createActionTo$message
X3 F: I% h2 n0 _- Q& @ (heat, new Selector (heat.getClass (), "stepRule", false));, s% N d; X8 [$ b" \
} catch (Exception e) {
! S2 N3 g* M0 |% I5 K System.err.println ("Exception stepRule: " + e.getMessage ());- Y. q7 m# ?6 f2 Y
}; O# g, k6 a! {" Y* ^
$ a" L, l+ ~; D
try {0 q- T# Q# |( }& c+ R' I. k5 q6 I
Heatbug proto = (Heatbug) heatbugList.get (0);. J# f7 u6 l6 K
Selector sel =
8 z' _& p W, [2 H new Selector (proto.getClass (), "heatbugStep", false); }) p# J M: L% c) g' Q
actionForEach =7 n( ]4 R0 d( J* R' D. d5 e
modelActions.createFActionForEachHomogeneous$call* X$ C- S8 ]1 i6 U5 A3 R
(heatbugList,4 o# e7 X4 ]: @ P
new FCallImpl (this, proto, sel,$ H+ i% F3 b; t9 M' N
new FArgumentsImpl (this, sel)));
5 Q" A) y* q. O& g; h2 ?: { } catch (Exception e) {6 i3 o9 K$ a; o# E( {- F/ `! x# ^4 Q1 p
e.printStackTrace (System.err);
3 v T# t: {* r }
. Y, Y! ~" V+ x6 l6 ?9 k . f8 V; Z0 e, u( T& C9 R
syncUpdateOrder ();
8 Y: Y; H5 N y: q$ s+ d4 F* E2 O4 ~4 H$ r3 c7 D9 S
try {. ~; ^( J9 q, W, \$ O/ s( v
modelActions.createActionTo$message
8 u% e* n4 E7 X8 Q+ g! m+ i1 m$ z; _ (heat, new Selector (heat.getClass (), "updateLattice", false));
# z) @$ i: b8 Z* W } catch (Exception e) {4 |) x) c r! X0 I( j
System.err.println("Exception updateLattice: " + e.getMessage ());
8 |1 H. O9 |! O5 h }
8 Z( @! d3 B* p( B
8 ^, r; H& z4 [ // Then we create a schedule that executes the
$ i, |1 Q0 P" T* u: V% I. p // modelActions. modelActions is an ActionGroup, by itself it
- {( q" G7 G. `! L // has no notion of time. In order to have it executed in1 V& t. {# a, r+ ^5 `+ Z' X
// time, we create a Schedule that says to use the9 t" g& d/ F1 t
// modelActions ActionGroup at particular times. This; f1 x. ^# ?1 a. v2 o
// schedule has a repeat interval of 1, it will loop every: a; y6 _. t0 k
// time step. The action is executed at time 0 relative to3 U& ^9 _+ D Y$ G! {( o7 K2 I
// the beginning of the loop.
- d5 q T% R( |# A$ I' f. T0 N F3 ^$ A9 Y+ N) X
// This is a simple schedule, with only one action that is! v% b0 F* @: b2 ?$ f
// just repeated every time. See jmousetrap for more; z1 a; R a. h' m( C1 g- |
// complicated schedules.8 |7 s. }1 T3 p; L# Q4 C
7 u, c. T6 ?1 P; l$ d( i modelSchedule = new ScheduleImpl (getZone (), 1);
& w4 y4 f# d$ s X9 c5 z& ` modelSchedule.at$createAction (0, modelActions);
" w4 X6 G7 T% I # f( u( k2 ?" A; G- \7 M+ o
return this;
3 O- H i, o6 w4 @4 x$ h, ` } |