HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; Z/ `% \( U( U( {$ W( B5 n1 x7 Y, H1 z+ V
public Object buildActions () {. |, S9 |& H8 R8 n9 o
super.buildActions();3 }: `5 u6 M* M5 U, j$ D/ U
+ i6 K; p2 F; N // Create the list of simulation actions. We put these in
; O) A% x1 F" \ // an action group, because we want these actions to be
! z, Y; s! ^1 t& c: Y- B // executed in a specific order, but these steps should
$ m- S9 N& B- O' n; ? // take no (simulated) time. The M(foo) means "The message* W: o' O9 a" r4 S0 W
// called <foo>". You can send a message To a particular+ e" S3 b! `; j3 J$ s' |# ^
// object, or ForEach object in a collection.& G) Q- N3 Y& g/ q
" A% b" X# O6 x* \: o // Note we update the heatspace in two phases: first run
" N+ `1 k* z/ d9 i: ` // diffusion, then run "updateWorld" to actually enact the
$ A/ j2 ], s* d; I! X7 x: b' V // changes the heatbugs have made. The ordering here is! W- e' q! D+ U- P S1 e+ U% o
// significant!" u/ z- Z: x& X3 A0 C: @
6 u9 Y( Y O7 Z) G' J8 v // Note also, that with the additional
: _9 A8 H4 c3 L1 B5 z' Z; p/ | // `randomizeHeatbugUpdateOrder' Boolean flag we can7 p9 D, E1 d5 h B$ j/ ^
// randomize the order in which the bugs actually run
8 G0 r' D) _/ H+ K$ C: @* ^ // their step rule. This has the effect of removing any4 G( D- w) Y9 m1 K, M' B; O
// systematic bias in the iteration throught the heatbug- y* r3 K; b9 X( _7 P
// list from timestep to timestep
! I3 ?6 S/ Q3 S: e8 b & D, H) U& I0 c
// By default, all `createActionForEach' modelActions have
: T7 ~- ?: ^+ i // a default order of `Sequential', which means that the
* T, R/ C3 }* H3 x. m0 Y // order of iteration through the `heatbugList' will be
9 T( I% @- ^* i- g( l // identical (assuming the list order is not changed5 y: A4 ~1 E- \0 o: }- V1 B2 o: k
// indirectly by some other process).
: e6 V8 j) T/ R7 O6 V& q; y
& ^% D6 J% _7 L: ~5 M6 { modelActions = new ActionGroupImpl (getZone ());& { ?3 U; ^% R& E: q1 q
/ f, _' t S/ x3 ^7 _
try {
, n0 L' e, `( }+ `, ]+ u) p modelActions.createActionTo$message9 L2 U. a9 Z3 t1 Q: p/ o1 q+ n
(heat, new Selector (heat.getClass (), "stepRule", false));7 {& g: L( O% `8 m- e) U
} catch (Exception e) {
) ^! s$ Y9 f4 J4 p' \" p; @ System.err.println ("Exception stepRule: " + e.getMessage ());: R( n* w; u% a% S, J2 q
}. `, b7 p4 @9 i" h9 ~
# I8 A9 a) A, K4 ]; }
try {2 |4 D+ u4 h. b8 e
Heatbug proto = (Heatbug) heatbugList.get (0);
% A* }8 G! T" L8 |, U9 C0 w Selector sel =
1 x v' k% j8 ?9 w9 p7 ?# N% ^# u new Selector (proto.getClass (), "heatbugStep", false);
' E4 `, E9 b* m- }9 @ actionForEach =
" o, k5 _2 v& y: T modelActions.createFActionForEachHomogeneous$call
/ N' B* S6 a! G+ e) A; O r) k U9 c (heatbugList,
2 D0 h3 Z+ p6 r* ~ new FCallImpl (this, proto, sel,
/ V! a6 v6 d$ }& a% K new FArgumentsImpl (this, sel)));
) C2 m: O( c& f } catch (Exception e) {
1 n/ u6 a2 a. a8 H$ A e.printStackTrace (System.err);
+ D, q) d, m9 F6 {. j$ Q; W; s }- ]1 {. Z, x( l X8 ] G5 Z
! p4 r5 }% q& j$ Q$ Y
syncUpdateOrder ();% f. K& \) `, x! O
4 }$ z- ~5 I. [" E e
try {
3 k4 _5 I, B: Z! i6 w* ~0 ]/ b6 h! j modelActions.createActionTo$message
. d4 [, e# \& b: `( A& Y (heat, new Selector (heat.getClass (), "updateLattice", false));3 Z& o7 y( \; |( u8 f# @
} catch (Exception e) {
+ `$ ~3 s8 d$ J System.err.println("Exception updateLattice: " + e.getMessage ());! U ~( V/ D4 S4 d. a& V
}: q. \. u, T! w. x, Q
, Z0 ]7 I6 {( K8 u" b
// Then we create a schedule that executes the
2 k- }+ L7 j" {7 G' }: v // modelActions. modelActions is an ActionGroup, by itself it
. x! R4 E# ?6 \! g4 A3 ]7 M // has no notion of time. In order to have it executed in4 l0 u6 H, z; t
// time, we create a Schedule that says to use the
* t0 J4 A7 x% N# `7 S6 R" F // modelActions ActionGroup at particular times. This
" J$ G& A/ j* F/ F // schedule has a repeat interval of 1, it will loop every
( Z2 R+ M2 a& Z% d& m. m // time step. The action is executed at time 0 relative to
3 m) D4 W2 w+ H w // the beginning of the loop.4 D* i) Y' ]: b
+ [9 `6 {" Z& T
// This is a simple schedule, with only one action that is
z5 t! r( V% O! o0 k8 J2 R // just repeated every time. See jmousetrap for more
D$ E2 y* D. F2 P' N9 z( n3 f // complicated schedules.
4 k$ t; P& L4 y ) U/ K2 X! c+ t3 r
modelSchedule = new ScheduleImpl (getZone (), 1);, }% B( S- z2 ?
modelSchedule.at$createAction (0, modelActions);
: n) E3 y: R* ?: o' Q& f( Y
# F% y; Y( }3 v7 ^2 E- Z' W return this;
) Z3 G* ]' g5 C# F& d } |