HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- D* {* W/ r- ^5 M) M p
4 Z! i0 L9 ?' m5 B, f- j+ A0 d public Object buildActions () {
3 l x3 m a; T: n% y super.buildActions();
" S g `' M0 }' K9 _+ }7 q & l# d9 C: ?) x3 A
// Create the list of simulation actions. We put these in
& p- m" {# t* X d // an action group, because we want these actions to be
4 T1 x* b5 L) Y1 g // executed in a specific order, but these steps should" o: Y) b9 x. L5 e0 A% O
// take no (simulated) time. The M(foo) means "The message
/ P- t# k- I! C) I$ f // called <foo>". You can send a message To a particular
* K7 I$ L) \2 c7 U5 ~0 y // object, or ForEach object in a collection.
4 w. O1 a& v. D; {0 D1 j0 T
6 Q: v* u+ F7 z; ?; C! Z // Note we update the heatspace in two phases: first run
5 t; m* V' c$ @1 | // diffusion, then run "updateWorld" to actually enact the! r% d: k1 \8 p+ K
// changes the heatbugs have made. The ordering here is
* Z- g3 o) i. A // significant!$ Q& y3 `3 M* r/ ^
+ n5 W, A, u/ E, D* [6 z8 x K) g
// Note also, that with the additional
7 @( k. N" [5 f3 K& s6 y/ i* ?! O // `randomizeHeatbugUpdateOrder' Boolean flag we can* y0 E7 Z3 D7 q7 {
// randomize the order in which the bugs actually run
1 }) Y/ ]; j9 j- u // their step rule. This has the effect of removing any
; C7 O' R" m, k8 P0 G0 ^ // systematic bias in the iteration throught the heatbug
! M4 `5 R g' d7 ~, y8 Q' B // list from timestep to timestep
& S# B E8 a1 v; E , T5 p1 r7 u3 J2 C
// By default, all `createActionForEach' modelActions have
1 |& }8 R7 o7 X8 @9 P* R // a default order of `Sequential', which means that the
8 ]8 u' n: j' d& [+ F# O& x) S2 X9 [; U0 n // order of iteration through the `heatbugList' will be& m0 {6 m. N/ E, m+ ~2 P
// identical (assuming the list order is not changed" |6 w* r \3 G8 Q8 [% A
// indirectly by some other process).
% r3 G( I- j6 @) q }7 X- f
2 Z3 @! Y) Q' B- v modelActions = new ActionGroupImpl (getZone ());
$ d% c2 p( q' A5 t0 S3 I7 h! j7 h4 Q/ {9 e2 r
try {
4 v; z! z- Y+ @6 ], Z& t' ` modelActions.createActionTo$message
1 h! q9 ^9 q2 Q& X7 t- M (heat, new Selector (heat.getClass (), "stepRule", false));8 O; h" Z& n* R
} catch (Exception e) {
! h8 E3 a1 F } System.err.println ("Exception stepRule: " + e.getMessage ());6 I2 M- Y4 |7 Y9 H7 X- g8 {
}2 Q6 Z, K5 T4 t: v- x: w9 T
- q3 r, B# K2 c6 Z9 z) v
try {5 ^& i1 N9 b$ e4 a
Heatbug proto = (Heatbug) heatbugList.get (0);
2 W; \0 n, Z8 Q Selector sel = 2 s# }6 F. ^0 G7 ?7 S5 |
new Selector (proto.getClass (), "heatbugStep", false);
$ H9 M( r; U5 p0 [, V) A actionForEach =& k; s; H2 Y$ ?; r* d4 D
modelActions.createFActionForEachHomogeneous$call6 ?5 b* H6 B! [- x: d4 f$ Z: T
(heatbugList,
; B7 z- O7 \! @( I& q+ b new FCallImpl (this, proto, sel,
7 Z: m. o4 R! r: v. X1 { new FArgumentsImpl (this, sel)));3 C) X3 ^' T- s* L% X$ N
} catch (Exception e) {8 h1 W6 ?* D. @# g* Z# b3 E
e.printStackTrace (System.err);
' m# V. a; u' ]+ g! B }
5 v& p. f& E s w
9 a+ _' t/ Y% G- v syncUpdateOrder ();
+ V( V3 Q& I% y. z) q x$ d
2 r9 I( U$ H. p* K5 J# {; H try {
) u. w; v4 D% L4 @! e! o modelActions.createActionTo$message 6 `( R$ r8 z3 X$ n( ^( N, h
(heat, new Selector (heat.getClass (), "updateLattice", false));
s* L$ J4 t/ D } catch (Exception e) {
& i7 f8 P6 v- a% i; W4 \ System.err.println("Exception updateLattice: " + e.getMessage ());8 `0 w2 o1 W" i; O" ]3 K/ o# S. y
}# E7 _- i. O. {3 _, n2 d2 D
& o/ g- t9 g( X% g% k
// Then we create a schedule that executes the
* v: t" k* D3 a; t/ f0 w" t // modelActions. modelActions is an ActionGroup, by itself it: ?: O/ w6 P) p
// has no notion of time. In order to have it executed in; [* @# M8 ^9 l! F
// time, we create a Schedule that says to use the
7 B% h z5 h6 w5 u; J" S/ g3 ?, W // modelActions ActionGroup at particular times. This
4 a7 o7 d1 d D- [0 R9 k) Z // schedule has a repeat interval of 1, it will loop every
% ~- h7 s4 b2 O, j // time step. The action is executed at time 0 relative to! e: _; d' G! V. Y! L4 a
// the beginning of the loop.8 @8 N1 D- i0 w [/ l$ X( {
5 X- T4 ^, L+ v9 }, x' ~- }. I) w
// This is a simple schedule, with only one action that is
. W7 ?, s" `! D6 y" y# ], k // just repeated every time. See jmousetrap for more
+ n4 f; R1 u( A \ // complicated schedules.
. ]$ t! @! ~1 v8 a: H3 c. U+ ?8 _ ( R; \" F# {* p6 p
modelSchedule = new ScheduleImpl (getZone (), 1);
& w* ?) D/ x* G5 i) {2 D4 M modelSchedule.at$createAction (0, modelActions);6 ^; d: _1 ]* _) h1 P
$ b& f f. n( o& Y$ T4 f8 A
return this;
4 h- V4 [/ @* h; f5 y } |