HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, O, Y4 _" G; l9 j: y
: y" H: b/ N s/ F; R9 u6 `- u: z public Object buildActions () {( Z: f, F2 d# V9 y
super.buildActions();8 w1 F) b( b) O8 Z
" B% l5 A4 r0 {. }9 u // Create the list of simulation actions. We put these in) O$ M6 s/ |% h# }, f
// an action group, because we want these actions to be
* i2 Q1 V; b7 G8 ^% z% F // executed in a specific order, but these steps should
! g5 M8 T+ u9 H7 P6 M9 U! J // take no (simulated) time. The M(foo) means "The message
: r' J, \" i& ^$ B" ]3 V8 `! f1 ^ // called <foo>". You can send a message To a particular+ N9 K# o5 Z8 s5 F1 S& o) w% `- V
// object, or ForEach object in a collection.
- Y8 q# X2 ]" D3 [( v% Z ; z; s1 r/ N6 g4 l: m, t/ D0 s
// Note we update the heatspace in two phases: first run2 Q. g0 V# G- b4 }* n0 X5 M8 a
// diffusion, then run "updateWorld" to actually enact the9 k6 X7 n! O8 i5 z1 _* S! _
// changes the heatbugs have made. The ordering here is
7 h I- z- i, I6 a% b // significant!, h" c, Y9 g) a
; w% G$ c" ^3 s% g2 x
// Note also, that with the additional$ k/ k( ~0 o8 c- g3 d
// `randomizeHeatbugUpdateOrder' Boolean flag we can |2 D7 i1 r" [* V6 b
// randomize the order in which the bugs actually run
( ]" k+ h" O" O1 Y# w! h1 A // their step rule. This has the effect of removing any
% `/ L' h3 |3 F# j! o8 [ // systematic bias in the iteration throught the heatbug
8 p. J8 i3 X! Z9 K/ J# B- ]0 E // list from timestep to timestep5 D1 n$ t2 i6 F" }5 I6 @& K
6 g3 E0 e; Q! l! l' u2 Z, x // By default, all `createActionForEach' modelActions have2 b" |; |9 |8 M4 |5 i: R3 o
// a default order of `Sequential', which means that the
6 Q: V/ [; v3 Z' ?) K4 _( J // order of iteration through the `heatbugList' will be
; ~! o2 z, ]! v. f- ` // identical (assuming the list order is not changed! s/ s! n6 ^# C# s% r
// indirectly by some other process).
6 A3 l! j, f. W 1 Y4 D7 `; A0 r6 V1 W
modelActions = new ActionGroupImpl (getZone ());0 l( Q% W$ _* T' b& i; G
: T( s- d" d0 o" h. n g5 s
try {
$ P- X& Y: w* M- o modelActions.createActionTo$message. k9 d$ _' P8 r) l# z
(heat, new Selector (heat.getClass (), "stepRule", false));
; c# w. J' {7 f3 S. n" Q2 l3 L } catch (Exception e) {5 o5 f0 H- B5 z3 S6 {
System.err.println ("Exception stepRule: " + e.getMessage ());
5 L4 `# T$ L2 C, \2 w }" C" D Y7 x+ i9 X9 J
- N4 ?6 ?) Y- J) e, z
try { y- \. f5 G# g" \! [) L
Heatbug proto = (Heatbug) heatbugList.get (0);
! I9 m: @) _* q$ l- \! D' d# f Selector sel =
( u$ r# B2 u+ q' X new Selector (proto.getClass (), "heatbugStep", false);# a( [) @; v" h6 N' [/ y, M
actionForEach =0 ] r! P7 S9 o4 i) n8 e
modelActions.createFActionForEachHomogeneous$call2 r% W0 @' E' p; C; o
(heatbugList,7 f- _6 @2 C5 |0 H2 k+ A
new FCallImpl (this, proto, sel,
! l" d4 F( K& T+ o, i new FArgumentsImpl (this, sel)));
3 r, R( c" ]! v( B } catch (Exception e) {
; U5 R, Q( _ q! v9 a e.printStackTrace (System.err);7 ?8 t2 ? u `" ]2 \6 a
}
4 P3 N- Y0 ~& `& v ; Z4 V9 ^9 y4 C& S
syncUpdateOrder ();
$ }3 r0 a; s5 Q% l: ]6 ^8 d7 p9 t
try {
- b' o0 ?% o1 i0 U8 z, a modelActions.createActionTo$message
3 R4 F; w# |3 _2 p (heat, new Selector (heat.getClass (), "updateLattice", false));
$ P4 W: A/ z. N" S } catch (Exception e) {
- |2 o% x8 Y! V1 ^2 v& X8 i System.err.println("Exception updateLattice: " + e.getMessage ());
3 q$ z. I) j' k }9 }1 V$ _% _( T' c: |
' v" o/ J7 e8 E$ @5 H
// Then we create a schedule that executes the
2 J# A/ u0 ^4 U$ t v! R( D+ [ // modelActions. modelActions is an ActionGroup, by itself it6 U& R3 w, M9 B; r& R$ t0 d
// has no notion of time. In order to have it executed in
" x8 C9 r. v) ]1 q; ^. c // time, we create a Schedule that says to use the
. S) K4 U& m/ U9 U. r" k7 z1 j i // modelActions ActionGroup at particular times. This
6 K& _, f( @9 b // schedule has a repeat interval of 1, it will loop every Y' ]' J' N' q
// time step. The action is executed at time 0 relative to, d2 r+ j5 S6 i2 C' R; t. F
// the beginning of the loop.
" K2 e1 }$ O3 J. C0 M$ V
" ] b+ h7 ^7 U4 X // This is a simple schedule, with only one action that is4 v, O4 w6 |. Z# W6 Z" v
// just repeated every time. See jmousetrap for more" a3 M9 [. k8 v( e
// complicated schedules.8 Y- D( b0 D& [+ h* Y6 W, F* d% I
9 I# v* h1 {3 q, a0 ?
modelSchedule = new ScheduleImpl (getZone (), 1);" T6 J3 ]& W; b- t' W2 U* \, p: |' A- d
modelSchedule.at$createAction (0, modelActions);% v" D0 d; c, o, u! R0 T* k
( H. b. k: ^1 w3 Z6 v, [4 ^# D+ ~
return this;
1 `& y0 y8 N6 S* d) ^9 m } |