HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( _' g+ R- {1 ?( D* i0 T. @4 E" H- c* Q; E3 X
public Object buildActions () {" D3 A+ [, t, j# j( a( U6 \
super.buildActions();( O) w/ x. m9 A# }
! _7 @; N" u1 w0 y; `
// Create the list of simulation actions. We put these in0 d7 U0 Z+ r. C
// an action group, because we want these actions to be/ j7 ? }) i4 v9 y- h! m0 Y- t2 T
// executed in a specific order, but these steps should+ E+ X4 Z2 ^3 q! |( T! ~! I
// take no (simulated) time. The M(foo) means "The message
- D7 X# I' D: y // called <foo>". You can send a message To a particular
3 [: @* m2 J' x( c) w // object, or ForEach object in a collection.
: Y9 }& N# C4 h6 l9 D# K v 7 ?1 A. i* q0 G% S
// Note we update the heatspace in two phases: first run3 h9 d( |$ G4 X' P" F
// diffusion, then run "updateWorld" to actually enact the) P) l* k8 u2 a
// changes the heatbugs have made. The ordering here is
0 ?6 q. L: z7 V) I& b // significant!
3 [ F! k* Z! q( g
2 X3 X0 R4 q# |3 i: R // Note also, that with the additional) _) \, p& z% M- D* Y9 K
// `randomizeHeatbugUpdateOrder' Boolean flag we can* x+ i; e& _9 j0 ` b
// randomize the order in which the bugs actually run
8 ^6 u- ^5 f m0 n1 C% M) L // their step rule. This has the effect of removing any
8 y& d# g( [9 L // systematic bias in the iteration throught the heatbug6 B8 R* b- g6 | m0 S# _( {# N
// list from timestep to timestep
- C5 ~% w& o1 `/ w
+ Q6 }8 O/ \ c+ d% M& T1 Q7 {" Q // By default, all `createActionForEach' modelActions have
( L4 \" C4 t0 x7 B7 o8 n) N // a default order of `Sequential', which means that the( [4 F+ R' c: u+ d4 B! T: L" `
// order of iteration through the `heatbugList' will be4 c. s+ q W+ J3 [1 ]5 T6 N [
// identical (assuming the list order is not changed7 z! @( j) Z7 t! ~, t
// indirectly by some other process).
. I# ~! f5 k8 x! \% M- T p, ] : U9 m% ^# {. n$ Q2 O4 b
modelActions = new ActionGroupImpl (getZone ());1 g" B1 k4 D3 s
7 W3 ]+ S) Q& `7 [. k' C try {
% x- b. d1 @. Z$ e3 R8 @2 J0 g modelActions.createActionTo$message8 A; X9 k. S* Z/ d
(heat, new Selector (heat.getClass (), "stepRule", false));% X# d |& F( }6 w, P- l9 n) A6 `
} catch (Exception e) {
: s" G- ~" k. ?; h9 \ System.err.println ("Exception stepRule: " + e.getMessage ());
9 U# n* G7 R8 t }% {2 b/ R# n) M0 A9 h+ f
3 s* f% h# H8 Z: C( g$ o
try {& D8 \& b. D4 R! |* z
Heatbug proto = (Heatbug) heatbugList.get (0);
( x% c; s& O8 F' i9 t Selector sel =
1 e E! B, p0 `; _2 Y8 P new Selector (proto.getClass (), "heatbugStep", false);( d. L/ d5 c4 L% ]
actionForEach =5 k, R0 C$ j' e9 g! Y
modelActions.createFActionForEachHomogeneous$call
: x! j5 ~# r/ o! _$ Y (heatbugList,
: N) `: X1 a C% [' e new FCallImpl (this, proto, sel,
1 R# B; D) P+ q. C( o" q new FArgumentsImpl (this, sel)));: j$ d( f4 B- l* z! n
} catch (Exception e) {* K3 y/ @/ @/ S% R/ b
e.printStackTrace (System.err);
; n, d; g0 i- K( g) }1 X. i }
5 h- x! ]9 J* u l1 n + L" P% B3 F Y0 J
syncUpdateOrder ();
( s {* Z' C6 z: I$ _$ `! ^/ L
try {. F% ]; `- R; z* B1 U% T9 K
modelActions.createActionTo$message ( w( ]& c& Z' p3 N
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ W% H1 l6 X3 x } catch (Exception e) {
" a# z* D( ?7 s. |% j System.err.println("Exception updateLattice: " + e.getMessage ());+ a& }6 b+ b# k% V6 f- ?( d
}9 d' n9 R2 q$ E, R/ x' r5 \$ M
2 E2 [3 i$ f3 ~8 }
// Then we create a schedule that executes the1 q6 n, D0 _- w" m ~& @. f
// modelActions. modelActions is an ActionGroup, by itself it, {) c6 B: P1 f! b9 N n
// has no notion of time. In order to have it executed in
; `: I$ N F Q // time, we create a Schedule that says to use the
* m" J/ `/ \/ o6 V // modelActions ActionGroup at particular times. This
. d' ` l2 ?; M- g$ |1 N // schedule has a repeat interval of 1, it will loop every* y, W8 a: l4 \# m- y& j
// time step. The action is executed at time 0 relative to6 s) R! T- J6 U2 S) x4 y E
// the beginning of the loop.
9 [* m: R# }- I2 o. e) `: V6 [
" H: o u# O1 g1 Y8 E // This is a simple schedule, with only one action that is# P( R2 m2 E0 X- @: _! w: S
// just repeated every time. See jmousetrap for more
) D5 j' p* M. u4 e" S3 t // complicated schedules.$ R9 U$ B- S2 z4 l5 K
( E* m% @- P' Y. x
modelSchedule = new ScheduleImpl (getZone (), 1);+ s$ r1 d- J! C- r( A' A1 U
modelSchedule.at$createAction (0, modelActions);
* j& e2 S$ l$ k& w& l 2 e% v( e3 ^: c+ h( l( ]1 ^$ Q
return this; R; E3 N8 e' \- _3 H4 u4 \. g9 Z6 F
} |