HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 d4 \) f- R9 H
- l5 j; [( n% A: }4 |4 V4 u5 R# k public Object buildActions () {
, b, `* R* t# m9 B- I6 J super.buildActions();
; h4 V4 j% ]9 s8 `/ I' y - Q1 Z1 r+ h3 a* j N4 V, j: r
// Create the list of simulation actions. We put these in
3 }& n: i1 ^! v4 H+ ~4 [ // an action group, because we want these actions to be
. q- s: [9 W& h% C r // executed in a specific order, but these steps should
, v7 b Y! U# J1 Q! D: [' C // take no (simulated) time. The M(foo) means "The message
2 J, V1 q9 b) x6 ]+ e7 h( a // called <foo>". You can send a message To a particular
8 i% ]6 F! [$ Y // object, or ForEach object in a collection.
. i! G- u' h0 M7 i ! B* G; t% u( y# ?! {
// Note we update the heatspace in two phases: first run8 F3 O; n u4 i/ r
// diffusion, then run "updateWorld" to actually enact the5 K, g1 f' |7 l4 J6 P
// changes the heatbugs have made. The ordering here is
( Y8 I, p+ r* { // significant!' P' r. w2 u4 S: D
( A; E" r7 P' b4 q. j$ p* A+ i( { // Note also, that with the additional
n/ M0 _4 @8 h; K* H2 i // `randomizeHeatbugUpdateOrder' Boolean flag we can N* I$ A o2 k4 m9 P
// randomize the order in which the bugs actually run. A5 t7 n) y' ^
// their step rule. This has the effect of removing any
0 n7 M3 I" [2 r8 v( B* u, I // systematic bias in the iteration throught the heatbug* Q) L9 u! F, m' O: B% ?2 l- {
// list from timestep to timestep8 E9 r9 Q% t/ Q# q7 u0 o8 g s
5 Y3 @' l$ B: a7 d' u4 A
// By default, all `createActionForEach' modelActions have0 [7 f* Z+ \/ n' T" u
// a default order of `Sequential', which means that the, ` T3 x7 S; J/ U8 ^3 q$ ~
// order of iteration through the `heatbugList' will be; S% T+ j1 h0 k; `; s8 ` E
// identical (assuming the list order is not changed
0 T# m; Y4 X5 z* U% ] // indirectly by some other process).# z: ]2 F5 a+ N! h, E# t9 o
* f) j1 D3 s1 T3 _( `
modelActions = new ActionGroupImpl (getZone ());6 \7 M) E; q" V2 K
0 g& h! k* t$ Q! s try {
6 ~4 J# r8 H+ o modelActions.createActionTo$message
, Z3 `" p9 `* D$ j! T (heat, new Selector (heat.getClass (), "stepRule", false));
1 e+ C/ B( K: l2 @ } catch (Exception e) {2 ]6 `1 s; ~) z9 r1 l
System.err.println ("Exception stepRule: " + e.getMessage ());9 R4 \' J2 o t) ^4 b3 n) e
}. m5 Q7 `. M+ r$ `
$ G. f7 l* a1 ^3 d+ o try {
`& p) ]/ K0 @2 F0 [ R" O w8 y Heatbug proto = (Heatbug) heatbugList.get (0);; e, `+ Z4 R e$ ~# p0 b' m
Selector sel =
% T2 L! J) [6 J+ v; ~$ | new Selector (proto.getClass (), "heatbugStep", false);( d8 g9 P$ ?( p$ U
actionForEach =
' u* t* Y/ _" R% e* Q/ K! V modelActions.createFActionForEachHomogeneous$call
' H5 ^: p+ ?5 ]* s (heatbugList,8 G0 V5 U! h* l( ^6 f0 M, {' ~
new FCallImpl (this, proto, sel,1 b" K% z Q4 J
new FArgumentsImpl (this, sel)));- f$ ^/ @/ w4 i
} catch (Exception e) {+ r4 |( k9 |' _& h
e.printStackTrace (System.err);
7 e- q4 G1 _" Z- Z, j3 A }
2 ~6 r M; K, s5 d& |9 b
/ g5 C9 S3 @7 M# q' \ syncUpdateOrder ();
3 \- f# \4 p, h: k/ r
. r0 Y. ^ L, _! i1 J try {4 V+ l9 N0 d1 z J' M# }. J
modelActions.createActionTo$message 6 t; S4 {# D8 ?, _: h* ]! F, N
(heat, new Selector (heat.getClass (), "updateLattice", false));
: C: k" ], C' W9 I* G, X } catch (Exception e) {
: Z# R! V( m- q System.err.println("Exception updateLattice: " + e.getMessage ());
1 w, O' w u% o9 p }: k, {- | j4 i- L" m' Q/ ]
* Q2 x0 ?+ F0 P: O" O) i
// Then we create a schedule that executes the* B% O5 g1 t- `4 C- h
// modelActions. modelActions is an ActionGroup, by itself it7 |: G" G. M' j0 C
// has no notion of time. In order to have it executed in0 a6 v1 H6 e# S% X! t2 O
// time, we create a Schedule that says to use the2 T0 P4 \' I, p' ]2 w, h, I
// modelActions ActionGroup at particular times. This
+ K% r: N8 |" o // schedule has a repeat interval of 1, it will loop every
8 ?. o" ~% [5 U' o' e // time step. The action is executed at time 0 relative to
" B2 r. l9 j6 x% b // the beginning of the loop.$ P# u0 C. i) e; f" N
' h9 I$ ^1 x: W7 v; E" M, z2 p2 P // This is a simple schedule, with only one action that is
6 ~5 k5 a, ?$ @) y // just repeated every time. See jmousetrap for more) z- G9 [' E) t. c' q! K
// complicated schedules.9 V$ g4 N4 [0 t# B5 \, h) D& `1 f
) e* U! f. m9 ^3 n: i7 H: I modelSchedule = new ScheduleImpl (getZone (), 1);+ |' p$ d1 H" Y E! r" ]& E
modelSchedule.at$createAction (0, modelActions);1 o9 k( N, c% b1 t
/ x0 V) I9 E, L& }1 l4 \: k' A return this;
2 G% {! n! \; c. \' ^ } |