HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) |/ a _! U$ l/ _) r
3 `, I) D; ^6 P# h! F7 L! G7 S public Object buildActions () {$ q* ^5 `3 a' x* E; @( K, i
super.buildActions();
. K+ m4 X8 v3 c( q% {. i
v; c% U* o5 n // Create the list of simulation actions. We put these in
8 g p) W2 I$ d0 v // an action group, because we want these actions to be& @4 a9 y, F9 T; Q' P6 n
// executed in a specific order, but these steps should
* R; C$ `9 [ @& f1 F // take no (simulated) time. The M(foo) means "The message! T5 R: r/ c$ \% Q
// called <foo>". You can send a message To a particular6 N- p D, J7 b# A
// object, or ForEach object in a collection.' K; O- c" D1 P; ?5 ` s, D
( `- d, O+ s3 O* ]# Q3 O& G
// Note we update the heatspace in two phases: first run: [% k5 Z; o# ^
// diffusion, then run "updateWorld" to actually enact the
- P$ C) ?3 V) M# u, B // changes the heatbugs have made. The ordering here is' h% E4 B; | X6 K- P% P2 W$ f
// significant!
" n6 D9 ]+ a( L4 r ; z! K: s& G8 a+ i% @
// Note also, that with the additional' M; E/ F+ B3 `2 _
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 |! j6 V+ ^4 P6 X; H
// randomize the order in which the bugs actually run2 b- k+ Z* d+ C! O: t, W0 X" }
// their step rule. This has the effect of removing any
9 e" n- I% b, O2 k5 ~ // systematic bias in the iteration throught the heatbug( C3 v- H. y1 Q- {! ], ~# o; w
// list from timestep to timestep1 D- ^ c4 u; S+ E6 h* B
1 I: R/ L8 G- j% p2 }& T
// By default, all `createActionForEach' modelActions have# h$ c% C6 j& t* j/ r: [/ R
// a default order of `Sequential', which means that the
5 N# f5 x6 ~3 J" ^! B9 E // order of iteration through the `heatbugList' will be
0 W7 O, w/ v) C2 G. L // identical (assuming the list order is not changed% w' W5 S) q( E0 d& I
// indirectly by some other process).
% N& T2 x1 Z r+ G& o
& s4 V* @2 h8 b( J modelActions = new ActionGroupImpl (getZone ());
. @0 ]+ v7 D8 p
/ J/ S% g8 B4 A0 o' |8 N+ t( _0 g9 M try {
0 C/ ^4 D6 I% O. N9 Y modelActions.createActionTo$message1 w* _) V- \( k7 ]* H6 b
(heat, new Selector (heat.getClass (), "stepRule", false));/ H, l, R0 i P7 v& p
} catch (Exception e) {( i. Y& W. d2 l! A( i( U
System.err.println ("Exception stepRule: " + e.getMessage ());
+ @" P; P: S5 Q2 Q }" _3 p7 k8 R5 ~$ |$ K
, R$ r, Y8 ^& M4 j) i3 f
try {. \& H/ h1 }$ r; o
Heatbug proto = (Heatbug) heatbugList.get (0);
) M& h5 v# [# Q. e: O5 j Selector sel =
" {1 ^$ s1 D: J2 _ new Selector (proto.getClass (), "heatbugStep", false);
0 Y7 h# {% i0 Y' s: n actionForEach =2 t9 j8 y4 S* \
modelActions.createFActionForEachHomogeneous$call
% o3 l, @* u( F2 t, m' F (heatbugList,1 u, m* f; J6 {' r3 ]1 l8 a- m8 ]( M
new FCallImpl (this, proto, sel,3 T6 H& l# I) r4 K7 ?4 D
new FArgumentsImpl (this, sel)));
8 N ]/ u* |1 ? } catch (Exception e) {4 Z" U% k3 K" C/ i
e.printStackTrace (System.err);
( w$ O8 }: M9 H! R. o; p }1 k7 p8 A; n1 ?& Z6 W8 w ^. v& v
: s8 c3 I& Z/ t- K( ^ syncUpdateOrder ();! t2 y) W2 a/ w; ?/ e
* V* C2 `+ C) |% F9 _ p
try {6 w6 M% g) e7 T* D% f! w3 \. e2 Q
modelActions.createActionTo$message 3 ^, J5 |8 ] B& D" A+ R) r7 E
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 I) a0 T# v0 L: j' W } catch (Exception e) {
: d+ t& {. R$ p; I1 q1 e; C+ V System.err.println("Exception updateLattice: " + e.getMessage ());
: O D+ W& i! D/ i }
* N0 g3 Z' D% B2 A3 }
* u8 W4 B5 {( X5 C8 j // Then we create a schedule that executes the
# p& O9 W5 f" l0 A) Q // modelActions. modelActions is an ActionGroup, by itself it# d" M0 z; Y$ U! }3 s
// has no notion of time. In order to have it executed in
* N5 T# v c% k5 D; |! F; v/ R // time, we create a Schedule that says to use the: `. G2 r8 C2 f$ U
// modelActions ActionGroup at particular times. This
5 p* D; p+ Z. @1 Z5 D2 c // schedule has a repeat interval of 1, it will loop every9 H* Z. h* W6 W4 L) R) N
// time step. The action is executed at time 0 relative to
3 _0 F) f# _2 G+ q4 I. S // the beginning of the loop.
2 I4 Q. g" K6 V, S& [' d+ n I5 T( g$ v" g; j
// This is a simple schedule, with only one action that is
) }3 ]4 l( h" ?3 B' t$ C // just repeated every time. See jmousetrap for more4 C5 Y4 a, O) `8 ]; c$ m
// complicated schedules.4 K6 U. }; D1 `, x( Z$ E- V" _" ?
4 g6 Z8 {% o; {
modelSchedule = new ScheduleImpl (getZone (), 1);
6 a4 [# E+ s% q7 X3 v modelSchedule.at$createAction (0, modelActions);
: Q8 e7 t# |+ D4 M7 z9 U$ @
b1 p& b& s2 s. L1 [ return this;& c: o0 j% f* v2 c8 m
} |