HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ N: F, |9 E- c
+ |4 Z2 X4 D- B# ]9 R+ o) l public Object buildActions () {4 B/ T7 h4 Z: B; ]. ^
super.buildActions();6 {- E3 S/ R* w3 d1 ?. y
+ g3 C& H5 X$ A( U4 V, r7 Z
// Create the list of simulation actions. We put these in
8 h' l4 F x) l7 @# D2 X // an action group, because we want these actions to be6 `6 J: P5 g& o: l: s( ^6 ^
// executed in a specific order, but these steps should! Y) Q: V; Z( P4 V8 i2 J/ q
// take no (simulated) time. The M(foo) means "The message
% ]2 A8 J% ?4 O& M7 r // called <foo>". You can send a message To a particular
3 [& G. l* N* a8 b/ t6 Q- I* a // object, or ForEach object in a collection.$ `; W h8 S0 W# C
/ a/ S6 a% u, ?) N8 T // Note we update the heatspace in two phases: first run9 ~6 w1 m9 H; l* o& P
// diffusion, then run "updateWorld" to actually enact the
5 W* T. N8 U" Y& U: K" R& g3 x) l // changes the heatbugs have made. The ordering here is
: ]( J1 g! v9 S3 d6 D // significant!, ]# P- N( {: \2 m( v8 c
% W, V) c5 |4 R // Note also, that with the additional0 r& R6 s2 }/ O* S" H/ r% z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 K1 Y/ H1 a4 W // randomize the order in which the bugs actually run7 q1 D4 k! p5 p% O9 A
// their step rule. This has the effect of removing any
, G$ Z; B7 g; ]0 \/ U" \$ f' Q // systematic bias in the iteration throught the heatbug
/ Q. V) l2 l, n6 Z" ? // list from timestep to timestep
" N, e- d- I3 E! Y
$ e, N M" E2 s, ?' g# h9 K" W // By default, all `createActionForEach' modelActions have* E( |) A: o( X* R; h6 {3 A
// a default order of `Sequential', which means that the
% q: I3 {$ g, q3 o5 u7 E: u // order of iteration through the `heatbugList' will be% V2 t- ^9 ~: r* A
// identical (assuming the list order is not changed8 w$ ]3 Q% E$ z: v
// indirectly by some other process).8 I! `$ a; t% K& m. X
+ {1 e2 ~' r, B$ o2 w6 e0 ]8 e
modelActions = new ActionGroupImpl (getZone ());
. _7 ~) P3 k( v. Z- K1 B4 f% P+ L6 h3 U& M: C5 ]! x
try {1 @7 X4 J5 b$ x1 Y4 I6 u, f
modelActions.createActionTo$message, W+ O; R* Z; O2 W+ ]9 j
(heat, new Selector (heat.getClass (), "stepRule", false));
- P! Q, J r, F. w5 f7 J } catch (Exception e) {
8 R+ e: P o2 c3 w( l: o7 `6 c; b System.err.println ("Exception stepRule: " + e.getMessage ());
% R% r" \1 p3 t# O4 _+ X G }
+ d2 |5 `& r0 R6 w& u' C8 v2 S
5 I$ p2 w2 O& z; d# _# S2 Z try {2 ^# y% A# J1 y- L2 g" {7 f$ ^
Heatbug proto = (Heatbug) heatbugList.get (0);
/ H l8 ~0 J6 R, k: F Selector sel = ' }( W6 s" d( L& W
new Selector (proto.getClass (), "heatbugStep", false);
/ `+ p X- V7 {8 [: t8 W actionForEach =% m) a8 A7 `! e; M, c- V7 [
modelActions.createFActionForEachHomogeneous$call6 ?: h2 F' n) U1 m; L$ V8 |
(heatbugList,1 T. S/ O/ m ^! m" R- O0 H; R
new FCallImpl (this, proto, sel,: y* X0 Z( m" K9 W
new FArgumentsImpl (this, sel)));
1 b* g& l3 t6 M5 m6 F } catch (Exception e) {3 P5 ^& X- }& Z- m* w, ]( e$ S3 t
e.printStackTrace (System.err);
0 D! `% ?. k. D( G }
, N5 P' B+ q k$ T7 x. B% X
; T l Q' [5 P1 m syncUpdateOrder ();
$ t7 ? S7 O8 C4 I D) I- \; _, Y" v4 d( x8 A- C
try {
( Q5 J& q0 j" U: \( b/ P modelActions.createActionTo$message
0 @2 e* M. g, W (heat, new Selector (heat.getClass (), "updateLattice", false));5 S2 o: H$ @' ^
} catch (Exception e) {! A6 p( ^& a- r. s' b
System.err.println("Exception updateLattice: " + e.getMessage ());
* a9 b. S7 Z0 x. X; I4 M4 W3 f' ^ }
( f. R# A4 t& C
& j6 \ i3 }" u5 a& N/ l/ L. g // Then we create a schedule that executes the
' J# v; H3 i% U* } j4 K% C // modelActions. modelActions is an ActionGroup, by itself it A7 `1 [* S# b5 e
// has no notion of time. In order to have it executed in: ]- e( g. v6 P! ?6 f
// time, we create a Schedule that says to use the: G3 s; o7 \5 ?2 P
// modelActions ActionGroup at particular times. This6 B5 p, i$ c, x& E- y) }1 L
// schedule has a repeat interval of 1, it will loop every
2 ]; k# _9 ^" K% ^. x- X2 o // time step. The action is executed at time 0 relative to7 Z0 H8 \1 n u9 ^0 `4 Q8 N/ m
// the beginning of the loop.
+ |& a+ D# Y' s" R- o$ t' F8 u$ \: Z5 B! \! s! _# J
// This is a simple schedule, with only one action that is
6 |8 z: ~( a q& L9 u. m/ ], [/ D // just repeated every time. See jmousetrap for more
' r* E! z: Q& u. t( N& O9 n // complicated schedules.
/ {5 ?! u( Y4 U+ e1 j: z/ v- S. X ( v0 I! L! f' c; y8 ?4 |2 \* M2 _. {
modelSchedule = new ScheduleImpl (getZone (), 1);
: Y, V2 |6 `& Z: T9 e7 h; i+ S modelSchedule.at$createAction (0, modelActions);3 Y! R8 m9 v& l, K7 ^3 H
% i: ?+ |" \9 m$ n. h. p( z
return this;( k W2 `2 t4 N+ b( ` A
} |