HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- w3 N6 h+ g5 k+ ]# s/ h
0 y" B( E$ F& d/ ^% u3 @
public Object buildActions () {
% j# n3 E6 b) R super.buildActions();
0 K3 w2 e) H# X0 H- U7 @. D
# h3 L- d: `7 V8 {1 q0 m // Create the list of simulation actions. We put these in
, B2 \4 K$ c2 _0 _7 ~/ a8 } // an action group, because we want these actions to be2 B) \0 c0 {- ]/ @) s& g6 a
// executed in a specific order, but these steps should" v$ j% ?5 Y, ]4 y- c1 i& g1 ?
// take no (simulated) time. The M(foo) means "The message( y/ Y T4 t# A! a+ P/ o7 b
// called <foo>". You can send a message To a particular' U9 p' h8 {) |, ~% T
// object, or ForEach object in a collection.
, h, Z7 ~- n. Q: c5 g% }
6 h6 d7 J5 y. b- D // Note we update the heatspace in two phases: first run- K* s% w$ o/ @3 b9 Z
// diffusion, then run "updateWorld" to actually enact the" d* A& b. E' n9 c' J/ u. U$ v {5 b
// changes the heatbugs have made. The ordering here is
2 p) [5 m; k/ b1 Y# z // significant!
* _2 @7 x5 ^5 w+ G2 Y7 E7 A
% L1 r' Q( S; c6 O2 L' n) k // Note also, that with the additional$ Z6 r2 \& t( J
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ i6 a% p/ T. T! }
// randomize the order in which the bugs actually run
7 x% V9 T& O4 p6 f+ e& t: _ // their step rule. This has the effect of removing any4 O' M/ c" m2 l" T: m9 k. t2 G7 \
// systematic bias in the iteration throught the heatbug( E O# _. }( d7 i: e8 j( \
// list from timestep to timestep
, `% I& v) \- a) A% K$ c 0 Q& m. w f. M/ q* ~" s6 T6 V
// By default, all `createActionForEach' modelActions have
# g& Y/ \& }, ?* `0 d. t) C // a default order of `Sequential', which means that the
g G i- h6 S# b2 J$ l+ E // order of iteration through the `heatbugList' will be+ p; M: o0 f, z2 Y. I* {
// identical (assuming the list order is not changed
# U( c8 ?2 y+ w$ y1 g$ z5 L, E% t" t$ j4 } // indirectly by some other process).
, l7 H$ y; j9 l" T ; v0 R. W- A5 G* D2 P
modelActions = new ActionGroupImpl (getZone ());
& C* i! [/ ^0 O7 A6 T2 y% S1 w0 {9 K+ m& j4 Q# @% o
try {8 |' G" O! U) U
modelActions.createActionTo$message- \ I1 @! \8 D. E" G3 i
(heat, new Selector (heat.getClass (), "stepRule", false));
+ d7 {/ N0 o5 a4 | } catch (Exception e) {, Z" o; O1 Q1 c. ]1 Q& E' ^( V
System.err.println ("Exception stepRule: " + e.getMessage ());
4 E- Z5 o [' w% L9 J, C }
! y) S; w- w+ J8 I0 U7 v* I
2 e E) f* W0 ]& k) ?+ f try {( g0 m* l% E+ ^3 H
Heatbug proto = (Heatbug) heatbugList.get (0);
5 K0 s" Q3 o/ g5 M7 ]* k Selector sel =
% X8 j& J8 B" Q new Selector (proto.getClass (), "heatbugStep", false);
- u$ ? S" O6 U/ K8 \) T8 V actionForEach =9 H% X9 B9 X6 x
modelActions.createFActionForEachHomogeneous$call9 p8 U; l" A5 C4 ?1 d4 [
(heatbugList,
& a# J1 P- `$ f new FCallImpl (this, proto, sel,% e, `3 a# S1 V; U' G! c
new FArgumentsImpl (this, sel)));
1 V% w5 A/ u. [8 E4 s, u# Y } catch (Exception e) {! P6 G: o; @/ Y$ X2 W4 G6 S) h! O6 D
e.printStackTrace (System.err);" R) a. t+ Z6 S( G
}9 o! n" l" z. O# w$ ^
( F- d3 V7 N& }, L2 G7 b
syncUpdateOrder ();/ n: r$ R: i" l* v: K
; {6 N' \4 W6 G3 Y2 N& d
try {
7 i6 Y( h( u; ~7 }- M modelActions.createActionTo$message
% l, O, B5 G3 I2 h' M g (heat, new Selector (heat.getClass (), "updateLattice", false));
" r4 h, t4 I' k1 v2 B. V } catch (Exception e) {
; i7 v8 K b2 M( y0 y System.err.println("Exception updateLattice: " + e.getMessage ());( y1 q1 _, S# v5 u
}
' s/ P8 [; ]6 F. `& `5 e: P) Y
: O* O" l% R; _! P4 r // Then we create a schedule that executes the
. l0 y$ G% a- |8 C# P/ ^0 I" ` // modelActions. modelActions is an ActionGroup, by itself it7 Q: H4 {7 T4 G, \1 w( c
// has no notion of time. In order to have it executed in
+ @' R) l7 i x) j // time, we create a Schedule that says to use the% V$ X! n0 P- h! s' O, y. J
// modelActions ActionGroup at particular times. This( j9 D3 I K5 h$ l: T P3 N
// schedule has a repeat interval of 1, it will loop every
* h3 j! R5 u! c // time step. The action is executed at time 0 relative to1 b W5 ~/ t; j. `3 G; C' N, g
// the beginning of the loop.9 u2 ]- m5 E/ @. h* _
3 R6 b- t+ b( q9 k" {$ c2 u
// This is a simple schedule, with only one action that is
9 ? f. d; {. W" C // just repeated every time. See jmousetrap for more: \0 M( s" l$ n9 w O
// complicated schedules., Y) b3 M7 L; a0 G R, [% B1 S
* ]3 d0 x6 c3 @2 k5 h: r* K% ]* v6 I
modelSchedule = new ScheduleImpl (getZone (), 1);
. K! B) A/ i3 a- |* v4 g modelSchedule.at$createAction (0, modelActions);
8 N1 }! \2 I; @2 i% J) e' V 0 s0 s8 E4 k3 b) k% l4 S) V
return this;
[4 T7 ?* M1 I2 h, |( I. ] X } |