HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: d: n; W2 `5 j- @
( @4 E$ ^0 q$ a8 k7 J4 v l; Z0 g public Object buildActions () {
a; ^" x. W3 t( B3 k2 l super.buildActions();
) }, G1 s6 @( ?0 O+ T8 n {6 k: ?. a/ ]9 U
// Create the list of simulation actions. We put these in
! ^5 ?& Z9 o# p) ]3 l // an action group, because we want these actions to be+ m4 n1 H6 m0 f& @0 X3 }
// executed in a specific order, but these steps should
: m/ e9 f" s3 \ ]. K // take no (simulated) time. The M(foo) means "The message
# R) }8 r2 B! _$ C; e // called <foo>". You can send a message To a particular
4 J' U2 E4 A' E // object, or ForEach object in a collection.& ^; e5 p2 }$ O2 c4 z! f
7 C5 f" w1 X% F // Note we update the heatspace in two phases: first run
+ J$ A9 G' B$ ~- [3 V6 h: ^ // diffusion, then run "updateWorld" to actually enact the
4 z% R0 A m2 w3 ^" Q4 }3 r e // changes the heatbugs have made. The ordering here is
9 L6 s, H1 R. t7 @1 v; x9 {3 o$ z // significant!
6 M0 u, E8 H$ r: A 3 h8 }2 K. _: d% ]5 d: b9 g
// Note also, that with the additional( S4 q( w" E3 V: ]! {1 q U
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" T1 H& o# K. I8 f6 P' U2 S4 I // randomize the order in which the bugs actually run' _& K' k/ S% N. ^
// their step rule. This has the effect of removing any
! o& N2 O2 R, \) h) b // systematic bias in the iteration throught the heatbug/ {/ @1 i5 c' T% f# m
// list from timestep to timestep
5 `; p1 n" G x! I
9 A. o; a( F9 E7 N // By default, all `createActionForEach' modelActions have
7 p) Q+ ^; h; K" y) p9 b5 { // a default order of `Sequential', which means that the
/ ? T* ~. h5 L; j- } // order of iteration through the `heatbugList' will be3 G) {9 }; ?# g1 G
// identical (assuming the list order is not changed
% k) r. J* [$ H4 t // indirectly by some other process).
5 D; X! C; j# x
6 o# y6 Q; C2 i$ d0 Q+ [ modelActions = new ActionGroupImpl (getZone ());1 J3 ?: k% ]# f! d9 B- e I
- F6 ^# i# S. _4 R* [* M
try {. S0 V8 B0 b4 ^7 U
modelActions.createActionTo$message
6 }7 e$ r1 N* m9 z9 C$ p (heat, new Selector (heat.getClass (), "stepRule", false));
. K* x* G8 K+ s/ Z4 v D/ z* e } catch (Exception e) {
& {7 c* I+ c. c1 r System.err.println ("Exception stepRule: " + e.getMessage ());
; E. |- C) a, I5 I( X& l$ u }
8 d* C6 ]; c) y& ]; }* C# N, ^& ], G) T
try {
* D, s0 y1 i! T" W1 P7 ` Heatbug proto = (Heatbug) heatbugList.get (0);
) A2 I1 ^4 O* L2 v- K7 x/ X& L Selector sel =
5 W! K n0 M: b- q new Selector (proto.getClass (), "heatbugStep", false);! {/ B+ i( B h, \ M% W; I3 @
actionForEach =1 L# K$ G! K7 I' v8 L. {6 V h5 @
modelActions.createFActionForEachHomogeneous$call. e* ?3 i9 R) B3 r
(heatbugList,. r; J; s" n& J' Z( E
new FCallImpl (this, proto, sel,. F4 q* H+ L; Z& f2 \: {
new FArgumentsImpl (this, sel)));
$ Q3 U% f+ m, Y9 `2 l+ }+ h4 _ } catch (Exception e) {2 H: |$ I0 S5 Y/ V: ^8 F
e.printStackTrace (System.err);: _/ z4 {) \1 n& x
}. w% C) B- |0 _
* r( _, U" I/ T+ d syncUpdateOrder ();
# t8 N, J7 r# u& R |' s, m* p) j4 K' I
try {- z0 X% [! K3 |- A% N% ]: w1 y1 a
modelActions.createActionTo$message # N5 w6 [5 r& \1 m# b) x! x
(heat, new Selector (heat.getClass (), "updateLattice", false));
) n, s# u2 |9 n/ E, b2 n! I, B } catch (Exception e) {
3 B& ]& `3 P% [# t. ^& b0 c" a& J System.err.println("Exception updateLattice: " + e.getMessage ()); q0 r1 j* ~# @7 |) Z+ q2 J
}
. P% A. n3 B( S2 G! m+ t1 a$ z
1 l2 @0 h. W. K$ f- Q; O- ^# r5 }) N // Then we create a schedule that executes the1 ~& }' x/ A7 r9 E: \0 H. I/ F" ~
// modelActions. modelActions is an ActionGroup, by itself it6 r5 m- q$ D' K4 P, Q
// has no notion of time. In order to have it executed in) x- \' c5 }1 k5 a6 j+ T4 F
// time, we create a Schedule that says to use the
, o0 g& V; }% y // modelActions ActionGroup at particular times. This
3 u9 B5 @- n9 O // schedule has a repeat interval of 1, it will loop every
+ y8 t9 m, i/ }1 }7 l+ P8 E // time step. The action is executed at time 0 relative to
% a, s/ m2 _* H // the beginning of the loop.
, I0 p' J, `7 `! M6 \0 z# i9 |" Y! e+ O! [0 H7 e7 O
// This is a simple schedule, with only one action that is6 u* y1 v5 E% ^* |4 A
// just repeated every time. See jmousetrap for more
4 [3 p9 E: \+ \' j // complicated schedules./ [. W$ z0 x. X( M6 m0 k1 [4 `
$ r; ?& ?0 S- ]/ O2 E& O( ~
modelSchedule = new ScheduleImpl (getZone (), 1);
& @0 X( R3 @( z2 P; N modelSchedule.at$createAction (0, modelActions);
: x2 X* I1 R K0 l
( G3 u0 P/ k8 g) [% ]' h* S return this;
7 ]0 o P; ]8 m: C2 U } |