HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ Q2 T6 T4 c% O' L9 y2 K
! M4 W0 Z: j$ Y3 m public Object buildActions () {: }3 T0 ^# P" S
super.buildActions();
) k+ b& N& u8 m7 I
; w# c! v u" ]5 @/ Q) w( x I // Create the list of simulation actions. We put these in
" b2 ^% D1 j4 c" B7 T( g4 F // an action group, because we want these actions to be1 L8 Z/ X. @. v1 `, d
// executed in a specific order, but these steps should
4 W2 F9 R) k0 d* I& G3 ^+ l5 z7 M // take no (simulated) time. The M(foo) means "The message4 X6 r6 A b& j6 T* ^
// called <foo>". You can send a message To a particular0 l/ x2 f; V) A
// object, or ForEach object in a collection.
! F" {/ Y9 r7 C6 ^
1 s/ Q- {; V# j5 f2 K8 e // Note we update the heatspace in two phases: first run
7 K6 v% k$ x# x6 }& c2 ` // diffusion, then run "updateWorld" to actually enact the
- b4 c& j, N9 L" a; s# t& x$ g) o // changes the heatbugs have made. The ordering here is
) P; r C i4 X5 o+ Q // significant!& \5 r$ C2 ?0 Q0 M+ t
" B; Z% ~: I0 b8 V$ y! ^
// Note also, that with the additional- Q; O9 `( F6 {, V0 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 p; g9 |$ D& F, H. V2 ? // randomize the order in which the bugs actually run$ m& ^ u9 N: V2 @, a
// their step rule. This has the effect of removing any
1 z! O0 m/ G+ A% z( C/ S4 N // systematic bias in the iteration throught the heatbug
4 p! e/ p2 O4 i2 o% K, ` N // list from timestep to timestep# v# a6 R0 x' @! x
* n' H4 x+ P3 Z( `* A. L. C
// By default, all `createActionForEach' modelActions have9 i7 T- J$ d+ G* v0 h6 ~" L
// a default order of `Sequential', which means that the
; W7 N- C) h! W% ~3 I- G3 d7 b // order of iteration through the `heatbugList' will be
0 }' h6 x; k$ Y( j& W // identical (assuming the list order is not changed
5 e- A. H9 \2 w" m, S" U, _ // indirectly by some other process).* w% q8 F8 ]( f; R5 p
1 B6 m$ T, s+ z: V6 z- d" v* j modelActions = new ActionGroupImpl (getZone ());
2 S9 e; e8 q6 ?6 V' e8 a2 Z4 L( L& Y1 ^' i& `( r8 p
try {
& ^8 N# d6 u* D modelActions.createActionTo$message
% G3 L F: ]" x. j (heat, new Selector (heat.getClass (), "stepRule", false));, K/ M7 I1 f& H. f% @2 Q! Y! A
} catch (Exception e) {5 Y) c+ z; V% R, Y( W
System.err.println ("Exception stepRule: " + e.getMessage ());
0 N1 @$ j8 t; L3 U }6 D3 J: @8 P3 i) \2 A
$ K/ J+ f. b* a' C! N/ [
try {
; E( a6 s6 C2 F) [! p/ [/ V* k Heatbug proto = (Heatbug) heatbugList.get (0);
! E/ _3 G5 B; ~# ] f7 K4 o Selector sel =
. r7 o- f# O$ O, A# W3 D& J new Selector (proto.getClass (), "heatbugStep", false);
4 j, _- h. t. d! \ A$ b8 ?% o actionForEach =
- L! o3 R( E5 T5 s- E modelActions.createFActionForEachHomogeneous$call
( d$ x1 X+ L! w {* x( H+ A3 e (heatbugList,' [/ t! Y6 ]- A s! H
new FCallImpl (this, proto, sel,
8 R/ s; ` X( g3 |$ w- P$ I1 ^ new FArgumentsImpl (this, sel)));
" z# c' G# W- A6 T } catch (Exception e) {
9 @. S; G9 z7 K) k e.printStackTrace (System.err);
, b( x w+ |6 e) y; g }; O8 q7 p5 A! B( I6 d2 W) p
/ N* T5 C7 W/ Q7 Q1 y9 ]4 X
syncUpdateOrder ();
; L. Z" y* j5 ?1 O# {% W* v/ v) g4 F- S, ]( t w _% D2 V9 c+ F
try {3 D: k' `# m# h* n) [$ ~
modelActions.createActionTo$message 2 q! q( V! M1 r, }5 B- M5 q+ e
(heat, new Selector (heat.getClass (), "updateLattice", false));
- a' K. G- Y: | } catch (Exception e) {
0 t% P1 s* d+ ^$ T System.err.println("Exception updateLattice: " + e.getMessage ());
% A5 A5 u3 J! P/ [/ p }
2 d7 y$ z# U& l, O1 Q a( ] # @- v8 n) A2 s* U: O# R$ r# m! v
// Then we create a schedule that executes the" I `6 m8 M/ n( o
// modelActions. modelActions is an ActionGroup, by itself it2 M& Z! r" V$ d
// has no notion of time. In order to have it executed in
! ~3 n; K& |! k2 S7 ^* ^3 m& E // time, we create a Schedule that says to use the
7 L0 F4 D! u, R // modelActions ActionGroup at particular times. This, g& u" f0 D& u4 e/ k
// schedule has a repeat interval of 1, it will loop every
8 [4 I! T; _/ B1 |' s8 q3 a // time step. The action is executed at time 0 relative to
1 P ]$ P4 S i" M' P T // the beginning of the loop.
" E/ ]% \6 \6 e7 \
6 X) Z O8 _: M c# w- |! b0 s // This is a simple schedule, with only one action that is! m; T$ R" ]$ E! x4 q& @
// just repeated every time. See jmousetrap for more
- l3 q# r, D( i/ O. r# X // complicated schedules.6 {5 f7 o9 P3 G) v% P7 G/ L1 W) d
& U; G+ \6 H3 w
modelSchedule = new ScheduleImpl (getZone (), 1);+ L! m% a' m7 J4 g
modelSchedule.at$createAction (0, modelActions);
: P, H# I- ~" ]( @1 l/ u $ ]- t2 |9 a) F* i: ^! j K+ \7 r
return this;) B7 W k* N- y; \: c8 u& i4 @
} |