HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% H$ a# P" R3 q1 B' I7 z/ O) I+ q8 P9 E6 a- o
public Object buildActions () {/ w# C6 N$ B9 p+ N
super.buildActions();9 y$ Q! F' w4 p3 N, y" f
- Z+ h) x$ H% q! x7 P // Create the list of simulation actions. We put these in
2 g3 R# P7 ]; i: \8 f& U9 c# f# N // an action group, because we want these actions to be3 T' L& F* ^* L+ h. E# |' k
// executed in a specific order, but these steps should& p0 J% |' {; G
// take no (simulated) time. The M(foo) means "The message
+ A I% s! A, \+ F* o // called <foo>". You can send a message To a particular
$ T! b- m/ }( |4 n% _ // object, or ForEach object in a collection.
4 M! G3 X4 m2 f5 V5 S, Z- W % R% h2 M/ x6 F/ A! \" l+ ?
// Note we update the heatspace in two phases: first run
: A/ g5 w( X; W3 `$ b5 X: C // diffusion, then run "updateWorld" to actually enact the
7 @2 z" M3 x4 Z" e; b1 @8 b# a // changes the heatbugs have made. The ordering here is" V9 \- a4 G4 H6 h3 _
// significant!
/ P& k, S/ v( c8 ` _2 m; k 2 N2 @$ Z/ ~$ r& ?6 n7 d
// Note also, that with the additional' n; w+ y; ]/ }0 g8 ?/ k. _! N
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 |, w d, C. v# [+ l q8 s
// randomize the order in which the bugs actually run9 } p; Y. \. K* n6 K3 {2 ^. b
// their step rule. This has the effect of removing any, t5 u& \! s" G; u: s, i
// systematic bias in the iteration throught the heatbug r1 B& k7 L2 R. {& V
// list from timestep to timestep
2 e( ^5 O" _4 b o* V% I
* A, R' b, H' v6 A // By default, all `createActionForEach' modelActions have
$ Z4 i! D/ T* u // a default order of `Sequential', which means that the
; U3 y7 B% Z, A8 G8 ~' Z& o* ^ // order of iteration through the `heatbugList' will be0 q6 K9 \$ q! {% i M2 n; E/ [, i
// identical (assuming the list order is not changed
1 A0 l1 R0 s, `: F, o // indirectly by some other process).
4 s7 u1 R( Z) F; E3 U& W * ~7 c1 y+ a6 {
modelActions = new ActionGroupImpl (getZone ());" h! f7 U- E3 s) u" f
8 s1 D; X' J9 C try {
6 v4 i7 U/ w& q7 s3 m modelActions.createActionTo$message
0 y0 ]% T6 i- a8 g' [2 s& Y- { (heat, new Selector (heat.getClass (), "stepRule", false));
8 \* i% F) |# }+ B/ B" x } catch (Exception e) {1 R$ C; {' w8 b8 W( N
System.err.println ("Exception stepRule: " + e.getMessage ());
' A, m) Q$ K3 E9 B0 ]& D' D }
/ x G; R4 j. u6 y2 m; t! m' K0 E; y$ @
try {
; g0 H8 j8 R: C* n& ?" F# E1 U Heatbug proto = (Heatbug) heatbugList.get (0);
' k8 I* g! G" q+ F+ I; h Selector sel =
4 u, i* t/ `, f. G* d( l new Selector (proto.getClass (), "heatbugStep", false);" _+ p4 Q- v! M4 u
actionForEach =
9 N1 J I- P$ X4 [6 n modelActions.createFActionForEachHomogeneous$call
9 Q7 _# v. j! S% C. ^: c6 }/ X% t (heatbugList,
5 P9 P& ~9 f/ N, ?/ A, P new FCallImpl (this, proto, sel,
t$ v8 f6 E$ t8 X new FArgumentsImpl (this, sel)));$ X% t4 o- g7 m, _& T
} catch (Exception e) {
3 t* r; N# D# M3 P e.printStackTrace (System.err);
2 v6 Q+ o. i8 u; e. M) J+ ? }
6 k4 e5 ^" E) w/ S1 X" U$ N( L( b - Z& P: j2 d" [' C) ]6 J1 F5 m
syncUpdateOrder ();4 `+ \* Q9 W1 q
! f- a( U6 z3 t' ?( p e: r) G try {0 T7 z$ d1 W5 y" l2 e
modelActions.createActionTo$message % p" x7 ^% x1 Y
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 }9 d5 I" b9 G! z' [5 N9 t: w } catch (Exception e) {
3 H% T( n" b* j; _+ c System.err.println("Exception updateLattice: " + e.getMessage ());
0 a+ R; h+ Z9 q0 y. q$ q }
1 ~% k" [+ g' Z- G e0 G
: k0 X) G# d$ O // Then we create a schedule that executes the0 }3 m; ]( u2 x$ ]' e; M
// modelActions. modelActions is an ActionGroup, by itself it0 V0 @- @6 ^$ x5 k
// has no notion of time. In order to have it executed in
, _. Y8 O4 E8 i6 O- f // time, we create a Schedule that says to use the
4 \7 P9 D/ L6 F* b; j T4 C2 v // modelActions ActionGroup at particular times. This
$ Z7 }* T$ m0 v' J- p- b // schedule has a repeat interval of 1, it will loop every
% Z5 d$ G8 i$ v7 g; `9 i // time step. The action is executed at time 0 relative to
0 a g& C4 s* @ // the beginning of the loop.
7 t0 c: ] R- x. ]1 W
, K7 B' d7 `& D3 X1 \ // This is a simple schedule, with only one action that is
, L2 e R3 Y( y' I+ t. \( q* i9 n // just repeated every time. See jmousetrap for more0 \! U' S% A- w$ k
// complicated schedules.1 d G/ U3 n9 H. ]' w$ a6 u& I+ ~
, f6 O5 m/ O$ |8 P8 m5 S
modelSchedule = new ScheduleImpl (getZone (), 1);- C" P" l& O8 G O8 t" ]! [' Y- z4 e- s
modelSchedule.at$createAction (0, modelActions);
( E1 f7 K$ K. m- b q5 q0 U" J% M 6 r$ V: G3 o5 ?* B- P* E
return this;: ?; j6 u- G m, ]
} |