HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- [' ^0 u% ]/ S% v+ S; i1 m. f
* c! f* [# e2 N4 ^: ^8 p+ u* G4 g public Object buildActions () {2 ?& g* m, E' h8 r' X
super.buildActions();& i1 I# p$ K8 n5 ]% W4 K B+ r/ y- `
; Y& Q @6 N {" t
// Create the list of simulation actions. We put these in, s1 P$ @5 ?# T/ j }
// an action group, because we want these actions to be
8 V2 {# G4 i/ g) h) Y // executed in a specific order, but these steps should6 P9 t3 D" H6 b8 _! G
// take no (simulated) time. The M(foo) means "The message7 g7 `2 l7 h' m1 z9 h
// called <foo>". You can send a message To a particular/ U6 N8 c' J) B w& H0 m8 u6 t0 ~
// object, or ForEach object in a collection.5 ^$ w8 E+ J# e3 J5 j1 Z4 E! F
+ u* S" P: c* Y* K: G! |! r& T a // Note we update the heatspace in two phases: first run+ P, ~ `& v. d6 o7 [$ w6 N3 d% M' R
// diffusion, then run "updateWorld" to actually enact the0 p2 x$ z( o% n6 ]
// changes the heatbugs have made. The ordering here is6 ]8 Z: g- @" l! [# k1 Y7 w% g) X
// significant!8 D& X9 I W8 M5 }
+ x: L1 x6 o7 \) P }" V
// Note also, that with the additional
. C9 `8 v0 ]! @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 h+ U6 P) I; D // randomize the order in which the bugs actually run" s" C+ y( V6 }# Y6 L
// their step rule. This has the effect of removing any; P& ?( W; _+ r" V, S0 {
// systematic bias in the iteration throught the heatbug
, A- I. Z! \, q6 Z+ F/ \ // list from timestep to timestep
4 y. w9 r) J k- j
8 P# M; y! M6 D* a2 W // By default, all `createActionForEach' modelActions have# D: F; x7 o4 |( d( e$ P# c" S6 e
// a default order of `Sequential', which means that the. z4 q$ O" T' X4 ^, y& l' q
// order of iteration through the `heatbugList' will be* N2 K) h; i$ E( T. V! N
// identical (assuming the list order is not changed
. S7 ^1 t; ?, V; @ // indirectly by some other process).% q; h; m0 k1 D1 P) @6 I" X
% y) e$ |- I3 Z3 o- L& u" y
modelActions = new ActionGroupImpl (getZone ());
8 x1 n e3 U, E- u! ]3 @4 v( s4 y4 B- ~
try {& V. w' A6 H; d Z) H# e
modelActions.createActionTo$message" T- c$ w4 F) V) x' |
(heat, new Selector (heat.getClass (), "stepRule", false));
% j" `) E+ B( }! i, }% _ } catch (Exception e) {
, o$ x$ A6 y! v/ r System.err.println ("Exception stepRule: " + e.getMessage ());. g: d& v0 M5 j; M% \ C
}) y; V9 m- c- A2 a% y0 q. u/ i
) i9 p- |; g1 X1 \ try {
( h; ~8 `+ t. w0 n. Y5 E% { Heatbug proto = (Heatbug) heatbugList.get (0);
" x/ B: @: K( y" N/ I, Q Selector sel = 0 g' B% f6 x. _7 s' G( D
new Selector (proto.getClass (), "heatbugStep", false);9 N N& j4 r1 ?6 L% k
actionForEach =
: B& [5 I! G7 Y8 \8 @" X( R modelActions.createFActionForEachHomogeneous$call
5 _) [% o. ?- M. q (heatbugList,
# {' V! q5 k- l7 U new FCallImpl (this, proto, sel,- }! V% `7 O8 }0 f: V3 x! c
new FArgumentsImpl (this, sel)));
9 N8 S* H8 h- R/ S* B. `* p8 R5 J } catch (Exception e) {
# J$ y) b. A i3 l e.printStackTrace (System.err);
/ h" n1 W" U& m4 x) a2 D2 a8 `) C }8 b, F" p# W! V/ b5 ^0 v2 J
* Y8 H" O5 @9 V: R9 \) Q
syncUpdateOrder ();
/ R% C+ c: ^9 G/ ~ w$ k( N+ o# P
0 t# t# h, V, [4 Q1 g3 S try {) S2 \! k* {2 |; J# b' [9 d+ s
modelActions.createActionTo$message
' M1 E8 F# U; \9 K4 P! k (heat, new Selector (heat.getClass (), "updateLattice", false));
1 ?! @. ^% Y n } catch (Exception e) {
( h$ a" B3 d" m& [2 l, y" i2 _& ~ System.err.println("Exception updateLattice: " + e.getMessage ());
3 f/ r b* C) W: f, `# A }2 i9 w0 }# M9 x
+ E% R8 Y( c+ c$ w3 n0 G // Then we create a schedule that executes the
, j d! U8 N$ B- O9 u6 W- ~ // modelActions. modelActions is an ActionGroup, by itself it
: r' U2 A. [: w9 T // has no notion of time. In order to have it executed in' m0 V; h4 e% i+ s2 H& ~# ^
// time, we create a Schedule that says to use the
" `0 U+ N8 @$ Y9 T* ]2 P8 @2 ] // modelActions ActionGroup at particular times. This0 }1 Q, q1 ]) S8 O6 Y
// schedule has a repeat interval of 1, it will loop every
, ?- s- V0 q( A0 u, P2 Y, ~ // time step. The action is executed at time 0 relative to
- z- Y1 K) ~+ j* B* N1 m, P // the beginning of the loop.
, E+ W6 U5 v( C$ Z0 `0 ~4 a) t/ E; ]
// This is a simple schedule, with only one action that is
6 v3 h0 V; v7 l* F; O% W) v! D // just repeated every time. See jmousetrap for more' V3 e" t$ w3 C$ W; {1 ^3 Q; [
// complicated schedules.6 s) y9 G6 t' c& w8 V6 @
& p" P! P; w2 {
modelSchedule = new ScheduleImpl (getZone (), 1);
: S5 H5 k! X+ m: ?# S+ f modelSchedule.at$createAction (0, modelActions);2 u- B* @( d2 P0 b `6 j' b, q
1 ]1 L, ]* K, Z7 m( p return this;
2 @$ Q/ e& D3 X' t* w0 l5 L } |